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}}值?
答案 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)的