Как передать объект из контроллера Spring 3.0 в представление JSP и протестировать с помощью JSTL - PullRequest
6 голосов
/ 13 февраля 2010

Сначала у меня есть контроллер 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;
}

Вид похож на следующий,

* +1007 *

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

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

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

Спасибо

Ответы [ 3 ]

4 голосов
/ 13 февраля 2010

URI taglib неверен. Это старый JSTL 1.0 URI. Откуда ты это взял? Выбросьте этот 10-летний учебник / книгу;) Возьмите 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 в учебном пособии по Java EE, часть II, глава 5 , и о JSTL в учебном пособии по Java EE, часть II, глава 7 . Удачи.

1 голос
/ 13 февраля 2010

Ваши первые два тега <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, только если значение message.message фактически является значением "true". Поскольку это не так (это «Hello World»), тест не пройден.

Тест № 4 также неправильно отформатирован («не пусто» также должно быть внутри фигурных скобок) ...

1 голос
/ 13 февраля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...