![](/img/trans.png)
[英]How to access map key/value pair contained in a ModelMap object from jsp Spring MVC
[英]In a JSP scriptlet, how do you access a java.util.Date value passed from a Spring MVC ModelMap?
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无法获取添加到ModelMap
中的FooController
的myDate
值?
您应该能够使用${myDate}
访问ModelMap参数 - 请参阅类似的问题: 如何在jsp中访问ModelMap? 和JSP不在Spring中显示模型中的对象
ModelMap中的属性存储为请求(或会话,取决于您的声明) 属性 ,而不是参数。 在控制器方法完成执行后,Spring将转发到与返回的视图名称关联的JSP。
因此,在JSP中,必须使用request.getAttribute("myDate")
,而不是getParameter
。 实际上,你应该远离JSP中的Java代码,但是你也应该理解EL表达式的作用 - 在你的情况下, ${myDate}
找到名为“myDate”的请求属性。
PS:JSTL中有一个现有的标签,用于根据模式<fmt:formatDate>
格式化java.util.Date
。
这是一个请求参数,你需要适当地绑定,我在上周写了一篇博客文章:
http://linkedjava.blogspot.com/2011/06/spring-controller-with-date-object.html
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页面)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.