Как передать объект из контроллера 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. Удача.