繁体   English   中英

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

[英]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中的FooControllermyDate值?

您应该能够使用${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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM