2011-06-19 24 views
0

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

@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脚本未能获得被添加到ModelMapFooControllermyDate价值?

回答

1

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

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

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

0

由尼古拉·Albu的答案是正确的 - 这是要求属性,而不是参数。 属性是你在代码中使用API​​来请求你自己的东西(在这种情况下 - Spring MVC使用模型)。参数是由Servlet Container添加的,而不是你自己的,它们表示由浏览器发送的URL/POST参数。

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