在JSP scriptlet中,如何访问从Spring MVC ModelMap传递的java.util.Date值?

时间:2011-06-19 00:02:40

标签: java jsp spring-mvc jodatime

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 scriptlet无法获取myDate中添加到ModelMap的{​​{1}}值?

4 个答案:

答案 0 :(得分:1)

您应该只能使用${myDate}访问您的ModelMap参数 - 请参阅类似的问题:How do I access ModelMap in a jsp?JSPs not displaying objects from model in Spring

答案 1 :(得分:1)

ModelMap中的属性存储为请求(或会话,取决于您的声明)属性,而不是参数。 在控制器方法完成执行后,Spring将转发到与返回的视图名称关联的JSP。

因此,在JSP中,您必须使用request.getAttribute("myDate"),而不是getParameter。 实际上,你应该远离JSP中的Java代码,但是你也应该理解EL表达式的作用 - 在你的情况下,${myDate}找到名为“myDate”的请求属性。

P.S。:JSTL中有一个现有标签,用于根据模式java.util.Date格式化<fmt:formatDate>

答案 2 :(得分:0)

这是一个请求参数,你需要适当地绑定,我上周写了一篇博客文章:

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

答案 3 :(得分:0)

Nicolae Albu的答案是对的 - 这是请求属性,而不是参数。 属性是您自己与请求关联的东西,在代码中,使用API​​(在这种情况下 - Spring MVC使用Model来实现)。参数由Servlet Container添加,而不是您,它们代表浏览器发送的URL / POST参数。

唯一要添加的是$ {varName}等同于pageContext.findAttribute(“varName”); 和request.getAttribute(“varName”)相当于pageContext.getAttribute(“varName”,PageContext.REQUEST_SCOPE)(如果您不确定这是什么,请查看Servlet中的文档,请求,会话和应用程序范围) + JSP)的