【问题标题】:In a JSP scriptlet, how do you access a java.util.Date value passed from a Spring MVC ModelMap?在 JSP scriptlet 中,如何访问从 Spring MVC ModelMap 传递的 java.util.Date 值?
【发布时间】:2011-06-19 00:02:39
【问题描述】:

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 无法获取添加到 FooController 中的 ModelMapmyDate 值?

【问题讨论】:

    标签: java jsp spring-mvc jodatime


    【解决方案1】:

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

    【讨论】:

    • EL 语法(如您所描述的)是访问存储在模型中的数据的“正确”方式
    【解决方案2】:

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

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

    P.S.:JSTL 中有一个现有的标签,用于根据模式格式化java.util.Dates,&lt;fmt:formatDate&gt;

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

        唯一要补充的是 ${varName} 等价于 pageContext.findAttribute("varName"); 并且 request.getAttribute("varName") 等效于 pageContext.getAttribute("varName", PageContext.REQUEST_SCOPE) (如果您不确定这是关于什么的,请在 Servlet 中查找有关页面、请求、会话和应用程序范围的文档+JSP)。

        【讨论】:

          猜你喜欢
          • 2015-05-17
          • 1970-01-01
          • 2011-08-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-03
          相关资源
          最近更新 更多