Как передать объект из контроллера Spring 3.0 в JSP view и test с помощью JSTL

сначала у меня есть контроллер Spring 3.0 с методом, подобным следующему.

Я передаю представление объекту с именем "message "и надеюсь напечатать это сообщение через представление, если оно было установлено методом" doStuff".

@RequestMapping("/index")
public ModelAndView doStuff() {
    ModelAndView mav = new ModelAndView();
    Map<String, String> message = new HashMap<String, String>();
    message.put("message", "Hello World");
    mav.setViewName("pages/myView");
    mav.addObject("message", message);
    return mav;
}

представление похоже на следующее,

<%@ page session="false"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt" %>
<html>
<head>
<title>Test</title>
</head>
<body>
<c:if test="${message.message} != null">
    <div class="msg">test1: ${message.message}</div>
</c:if>
<c:if test="${message.message} != ''">
    <div class="msg">test2: ${message.message}</div>
</c:if>
<c:if test="${message.message}">
    <div class="msg">test3: ${message.message}</div>
</c:if>
<c:if test="not empty ${message.message}">
    <div class="msg">test4: ${message.message}</div>
</c:if>
<div class="msg">test5: ${message.message}</div>
</body>
</html>

пока только" test5 "печатает сообщение, но я хочу напечатать сообщение, только если" ${message.message} " не равно null.

Я пробовал оба "http://java.sun.com/jstl/core_rt "и"http://java.sun.com/jstl/core", но не может заставить операторы " " работать правильно.

у кого-нибудь есть идеи о том, что я делаю неправильно или лучший способ сделать это?

спасибо

3 ответов


первые две <c:if> теги должны выглядеть так:

<c:if test="${message.message != null}">
    <div class="msg">test1: ${message.message}</div>
</c:if>
<c:if test="${message.message != ''}">
    <div class="msg">test2: ${message.message}</div>
</c:if>

отметьте расположение != и } в атрибуте test -- условие должно быть внутри скобки.

кроме того, тест #3:

<c:if test="${message.message}">
    <div class="msg">test3: ${message.message}</div>
</c:if>

будет оценивать только true, если значение сообщения.сообщение на самом деле значение "true". Поскольку это не так (это "Hello World"), тест терпит неудачу.

тест #4 также отформатирован неправильно ("не пустой" также должен быть внутри скобок)...


URI-адрес библиотеки тегов-это неправильно. Это старый JSTL 1.0 URI. Откуда он у тебя? Выбросьте этот 10-летний учебник / книгу;) Go get JSTL 1.2 здесь и бросьте его в /WEB-INF/lib после удаления любых старых библиотек тегов JSTL (jstl.jar и standard.jar) и возможное извлеченное содержимое (некоторые плохие учебники, а именно предполагает, что вам нужно извлечь .tld файлы и поместите его в classpath, это неправильно).

указан правый URI в недавнем документация JSTL TLD. Если вы нажмете любую из отдельных библиотек JSTL, вы увидите правильный пример URI в верхней части документа, например JSTL, и ядро:

Стандартный Синтаксис:

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

XML-синтаксис:

    <anyxmlelement xmlns:c="http://java.sun.com/jsp/jstl/core" />

тем не менее, ваши тесты на самом деле неверны. Вы должны были использовать ${message.message != null}, ${message.message != ''} и ${not empty message.message}. Вы можете узнать больше об EL in Java EE учебник Часть II Глава 5 и о JSTL в Java EE учебник Часть II Глава 7. Удача.


URI, который вы ищете, это http://java.sun.com/jsp/jstl/core