2011-06-19 26 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)提供。