Как получить доступ к значению java.util.Date в скриптлете JSP, передаваемом из SpringMC ModelMap? - PullRequest
0 голосов
/ 19 июня 2011

FooController.java:

@RequestMapping(value = "/foo", method = RequestMethod.GET)
public final String foo(HttpServletRequest request, ModelMap model)
{
    java.util.Date myDate = new java.util.Date();
    model.addAttribute("myDate", myDate);
    return "foo";
}

foo.jsp:

<%
    java.util.Date myUtilDate = (java.util.Date)request.getParameter("myDate");
    org.joda.time.DateTime myJodaDate = new org.joda.time.DateTime(myUtilDate);
%>

<joda:format value="${myJodaDate}" style="LL"/>

Почему скриптлету JSP не удается получить значение myDate, которое было добавлено к ModelMap в FooController?

Ответы [ 4 ]

1 голос
/ 19 июня 2011

Атрибуты в ModelMap хранятся как запрос (или сеанс, в зависимости от ваших объявлений) атрибуты , а не параметры.После того как ваш метод контроллера завершит выполнение, Spring переадресует JSP, связанный с возвращенным именем представления.

Итак, в вашем JSP вы должны использовать request.getAttribute("myDate"), а не getParameter.На самом деле вы должны держаться подальше от Java-кода в JSP, но вы также должны понимать, что делают выражения EL - в вашем случае ${myDate} находит атрибут запроса с именем "myDate".

PS: существует существующийтег в JSTL для форматирования java.util.Date s на основе шаблонов, <fmt:formatDate>.

1 голос
/ 19 июня 2011

Вы должны иметь возможность просто получить доступ к параметру ModelMap с помощью ${myDate} - см. Аналогичные вопросы: Как получить доступ к ModelMap в jsp? и JSP, не отображающие объекты из модели в Spring

0 голосов
/ 27 июня 2011

Ответ Николае Албу прав - это запрос атрибут , а не параметр . Атрибут - это то, что вы связываете с запросом самостоятельно, в коде, используя API (в данном случае - Spring MVC делает это с помощью Model). Параметры добавляются контейнером сервлетов, а не вами, и они представляют параметры URL / POST, отправленные браузером.

Единственное, что нужно добавить, это то, что $ {varName} эквивалентно pageContext.findAttribute ("varName"); и request.getAttribute ("varName") эквивалентен pageContext.getAttribute ("varName", PageContext.REQUEST_SCOPE) (если вы не уверены, о чем идет речь, посмотрите документацию по областям страниц, запросов, сеансов и приложений в сервлетах + JSPs).

0 голосов
/ 20 июня 2011

Это параметр запроса, вам нужно правильно привязать, выходя из сети, я написал сообщение в блоге на прошлой неделе:

http://linkedjava.blogspot.com/2011/06/spring-controller-with-date-object.html

...