2016-06-12 130 views
4

對於我的開源項目,我正在將日期字段從java.util.Date切換到Java 8的java.time.LocalDateTime在JSP中使用Java8時間

在JSP中,我使用Struts標記來從傳入的bean中對java.util.Date進行格式化,但是,這些將不適用於Java 8時間。我使用Struts標籤不僅檢索時間字段也格式化字符串將用於解析它:

<s:text name="generic.date.toStringFormat"> 
    <s:param value="myBean.timeField" /> 
</s:text> 

"generic.date.toStringFormat"是在消息資源文件,myBean.timeField是從操作形式支持JSP。

看這個帖子:JSTL LocalDateTime format,似乎有兩個選擇,我可以使用,Sargue的https://github.com/sargue/java-time-jsptags或自定義EL函數,例如與前:

<javatime:format value="myBean.timeField" pattern="generic.date.toStringFormat"/> 

問題是,"myBean.timeField""generic.date.toStringFormat"似乎只能在Struts標籤中解析。如果<javatime>是一個標準的HTML標籤,我可以使用<s:property/>獲得值即可解決,例如,

<span><s:property value="myBean.timeField"/></span> 

<javatime:.../>是一個JSP標籤,我似乎無法化解其他JSP標籤內的Struts JSP標籤。問題:如何將bean值myBean.timeField和消息資源值generic.date.toStringFormat提取爲變量,以便我可以在上面的<javatime/>標記中引用它們? (如果這可以通過自定義EL功能選項來完成,那也適用於我。)

回答

1

您可以在value屬性中使用EL。 Struts2包裝了一個請求來搜索valueStack的屬性。這是從EL對本地操作變量的本地訪問。

<javatime:parseLocalDateTime value="${myBean.timeField}" pattern="generic.date.toStringFormat" var="parsedDate" /> 
+0

$ {myBean.timeField}完美地工作,THX,圖案部分(具有或不具有$ {}的)仍然失敗不過,我會看看是否可以使用JSTL fmt標記將資源值提取到var中,以便在jt:pLDT標記中執行pattern = {$ patternVar}。 –

0

更多信息添加到羅馬的回答是:要獲得資源文件的模式,添加在JSTL格式化標籤,並將其放置到一個變量:

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> 
<fmt:message key="generic.date.toStringFormat" var="dateFormat"/> 

以上羅馬的解決方案綜合起來用於提取${myBean.timeField}

012:

<javatime:format value="${myBean.timeField}" pattern="${dateFormat}" /> 

順便說一句,對於日期變量從一個Struts iterator標籤被檢索

<s:date name="#iter.myDateField"/> 

這可以通過使用Struts替換設置標籤:

<s:set var="tempTime" value="#comment.postTime"/> 
<javatime:format value="${tempTime}" pattern="${dateFormat}"/>