2010-08-11 45 views
16

我在我的模型中有一個Joda-DateTime字段,並且想要在JSP視圖中顯示它的格式。如何在Spring MVC 3.0中顯示格式化的DateTime?

public class Customer { 
    private DateTime dateOfBirth; 

    @DateTimeFormat(style="M-") 
    public DateTime getDateOfBirth() { 
     return dateOfBirth; 
    } 
} 

現在,我想在我的JSP來顯示出生日期:我已經與新@DateTimeFormat註解它

Date of birth: ${customer.dateOfBirth} 

但結果是未格式化:

Date of birth: 2010-08-11T11:23:30.148+02:00 

後一些研究發現,我必須使用彈簧:bind-tag:

<spring:bind path="customer.dateOfBirth"> 
    Date of birth: ${status.value} 
</spring:bind> 

有了它,它的作品。但這個簡單的任務似乎太複雜了。在列表中使用這種方法會更復雜,因爲您必須將列表索引集成到綁定路徑中。

所以我的問題是:是否有一種更簡單的方式來顯示格式化值使用彈簧格式化註釋?

回答

19

使用spring:eval標籤,其理解@DateTimeFormat規則:

<spring:eval expression="customer.dateOfBirth" /> 

或者,您可以從模型中的所有在一起去除@DateTimeFormat規則和使用喬達的formatDate標籤作爲Naikus說明。

在未來的版本中,Spring計劃支持插入「SpEL」,即Spring:eval調用的「Spring表達式語言」,作爲JSP頁面的默認Unified EL實現。這將允許像${customer.dateOfBirth}這樣的內聯表達式也通過SpEL路由。您可以在此投票贊成此增強請求:https://jira.spring.io/browse/SPR-7459

+0

Spring:eval很棒。除此之外我還提出了在JSP中集成SpEL的增強要求。謝謝。 – 2010-08-11 20:38:58

+0

我發現spring的一個小問題:版本3.0.3中的eval。當表達式求值爲null時,打印字符串'null'。相反,我的問題中的spring:bind示例在表達式計算爲null時打印一個空字符串。有沒有辦法來抑制'null'的輸出?謝謝。 – 2010-08-11 21:43:11

+0

你可以在http://jira.springframework.org上打開JIRA來報告這個問題嗎? – kdonald 2010-08-11 22:54:35

19

因爲它是joda datetime對象,而不是Date對象,所以您必須編寫自己的格式化函數或自定義標記。

如果您可以以某種方式將其轉換爲java.util.Date,那麼您可以使用內置的jstl的fmt taglibrary。

<fmt:formatDate value="${customer.dateOfBirth}" type="both" 
     pattern="MM-dd-yyyy" /> 

但最新JSP能夠讓您迅速創建customtags

+0

fmt鏈接似乎被打破。 – 2015-06-08 04:27:16

+0

@noobMama你需要在jsp頁面中定義taglib:<%@ taglib prefix =「fmt」uri =「http://java.sun.com/jsp/jstl/fmt」%> – 2016-04-13 02:16:27