Сначала у меня есть контроллер Spring 3.0 с методом, подобным следующему.
Я передаю представление объект, названный "сообщением", и надеюсь распечатать то сообщение через представление, если это было установлено "doStuff" методом.
@RequestMapping("/index")
public ModelAndView doStuff() {
ModelAndView mav = new ModelAndView();
Map message = new HashMap();
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" %>
Test
test1: ${message.message}
test2: ${message.message}
test3: ${message.message}
test4: ${message.message}
test5: ${message.message}
До сих пор только "test5" печатает сообщение, но я только хочу распечатать сообщение, если "$ {message.message}" не является пустым.
Я попробовал оба оператора "http://java.sun.com/jstl/core_rt" и "http://java.sun.com/jstl/core", but can not seem to get the "
У кого-либо были бы какие-либо идеи относительно того, что я делаю неправильно или лучший способ сделать это?
Спасибо
Ваши первые два тега
должны выглядеть так:
<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 также отформатирован неправильно ("не пусто" также должно быть внутри скобок)...
Неверный URI taglib. Это старый URI JSTL 1.0. Откуда ты это взял? Выбросьте этот учебник / книгу 10-летней давности;) Получите JSTL 1.2 здесь и поместите его в / WEB-INF / lib
после удаления всех старых библиотек JSTL ( jstl .jar
и standard.jar
) и возможное извлеченное содержимое (в некоторых некачественных руководствах предлагается извлечь файлы .tld
и поместить их в путь к классам, это неверно ).
Правильный URI указан в недавней документации JSTL TLD . Если вы щелкните любую из отдельных библиотек JSTL, вы увидите правильный пример URI вверху документа, например Ядро JSTL :
Стандартный синтаксис:
<% @ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core"%> {{ 1}}
Синтаксис XML:
Тем не менее, ваши тесты на самом деле ошибаются. Вы должны были использовать $ {message.message! = Null}
, $ {message.message! = ''}
и $ {not empty message.message}
. Дополнительные сведения об EL можно найти в учебном пособии по Java EE, часть II, глава 5 , а о JSTL - в , учебном пособии по Java EE, часть II, глава 7 . Удачи.
URI, который вы ищете, - http://java.sun.com/jsp/jstl/core