java
  • jsp
  • jstl
  • 2010-07-28 94 views 8 likes 
    8

    我使用JSP作爲視圖,Spring MVC 3.0作爲控制器。 在我的JSP中,我要顯示當前日期時間,對此我有以下代碼...在JSP/JSTL中的嵌套表達式

    <c:set var="dateTimeDisplayFormat" value='<spring:message code="display.dateFormat" />'/> 
    
    <c:set var="currentDateTime" 
        value='<%= new SimpleDateFormat(${dateTimeDisplayFormat}).format(new Date()) %>' 
        scope="page" /> 
    

    現在的問題是JSTL沒有認識到我的SimpleDateFormat的實例嵌套的標籤。我希望將格式字符串(從'dateTimeDisplayFormat'變量中獲得)傳遞給SimpleDateFormat構造函數。

    有人請指教如何在上面的c:set語句中爲SimpleDateFormat編寫嵌套構造函數?

    感謝您的期待!

    回答

    16

    <c:set>可以從標籤內容取它的價值,而不是從value屬性:

    <c:set var="dateTimeDisplayFormat"> 
        <spring:message code="display.dateFormat" /> 
    </c:set> 
    
    <c:set var="currentDateTime" scope="page"> 
        <%= new SimpleDateFormat(${dateTimeDisplayFormat}).format(new Date()) %> 
    </c:set>  
    

    更重要的是,你不應該需要<c:set>可言,因爲這兩個<spring:message><fmt:formatDate>可以存儲在他們的結果爲您的變量:

    <spring:message code="display.dateFormat" var="dateTimeDisplayFormat"/> 
    <fmt:formatDate pattern="${dateTimeDisplayFormat}" var="currentDateTime" scope="page"/> 
    
    +0

    謝謝你這麼多Skaffman,但你提出的第一個解決方案,沒有工作:(它給了我一個異常
    PWC6197:27在jsp文件:/WEB-INF/views/common/header.jsp PWC6199:生成的servlet錯誤:令牌 「$」 語法錯誤,AssignmentOperator預計此令牌 後的行發生錯誤 感謝您打開我的眼睛到第二種方法,但與此同時,日期現在顯示在頁面上,與我所有餘下的代碼是相同的,即。 PaiS 2010-07-28 08:44:49

    +0

    OMG!如此愚蠢的是,我沒有在頁面的頂部包含JSTL庫的格式,因此第二種方法無法工作。 現在它完美地展示了日期,並且非常感謝Skaffman的整潔方法! – PaiS 2010-07-28 09:01:16

    +1

    答案在精神上是正確的,但是語法錯誤來自混合scriptlet和el。這是真正的Java代碼(argh,不應該發生在JSP中),所以el變量可以(但不應該)像這樣訪問:'<%= new SimpleDateFormat(pageContext.getAttribute(「dateTimeDisplayFormat」))。格式(新日期())%>' – 2010-07-28 09:04:57

    相關問題