Как передать объект от контроллера Spring 3.0 до представления JSP и теста с JSTL

Сначала у меня есть контроллер 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 "" для работы правильно.

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

Спасибо

6
задан skaffman 12 February 2010 в 22:09
поделиться

3 ответа

Ваши первые два тега должны выглядеть так:

<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 также отформатирован неправильно ("не пусто" также должно быть внутри скобок)...

2
ответ дан 17 December 2019 в 00:08
поделиться

Неверный 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 . Удачи.

4
ответ дан 17 December 2019 в 00:08
поделиться

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

1
ответ дан 17 December 2019 в 00:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: