2016-03-05 38 views
1

我正在使用Struts2 taglib生成一個下降年份列表(2016,2015等..)。Struts2 taglib日期計算刪除小數

我使用的日期標籤從java.util.Date獲得一年,但是當我使用減號(-)運算符year自帶正確的,但帶有小數...

請看:

<s:set var="currentDate" value="%{new java.util.Date()}"/> 
<s:date var="currentDate2YEAR" name="#currentDate" format="yyyy" /> 
<br>(YEAR) = <s:property value="#currentDate2YEAR" /> 
<br>(YEAR -1) = <s:property value="#currentDate2YEAR - 1" /> 

有了這個,我得到:

(YEAR) = 2016 

(YEAR -1) = 2015.0  <== I need to remove this decimal ==> 

回答

0

我發現這個解決方案,它的工作原理(它使用的intValue方法):

<s:date var="currentDate2YEAR" name="#currentDate" format="yyyy" /> 
<br>(YEAR) = <s:property value="#currentDate2YEAR" /> 
<br>(YEAR -1) = <s:set var="year" value="#currentDate2YEAR - 1" /> 
<br>(YEAR -1) = <s:property value="#year.intValue()" /> 
+0

所以,你要使用額外的''爲每個計算?看看[我的答案](http://stackoverflow.com/a/35842876/1700321)。 –

0

有很多許多方法來做到這一點,並像往常一樣,更好的是涉及服務器端方法,將視圖中的邏輯減少到生理最小值。順便說一句,如果你需要做的是在視圖中,嘗試這樣的:

<s:set var="currentDate" value="%{new java.util.Date()}"/> 
<s:set var="currentYear"> 
    <s:date name="#currentDate" format="yyyy" /> 
</s:set> 
<br>(YEAR)  = <s:property value="%{#currentYear }" /> 
<br>(YEAR - 1) = <s:property value="%{#currentYear - 1}" /> 
<br>(YEAR - 2) = <s:property value="%{#currentYear - 2}" /> 

它也可以迭代器內的腳本,它會幫助,如果你可以發佈關於你actualing做什麼的詳細信息,如果這不起作用或者不夠。

0

首先:不要在視圖中做那種東西,而是在後端中構建一個列表,在視圖中迭代它。第二:你正在使用一些舊版本的Struts2,這就是爲什麼這個 - ><s:set value="%{new java.util.Date()}"/>被允許。在最新版本中,您無法以這種方式在JSP中創建新實例。您可以使用<s:bean>標籤來完成此操作。

第三:爲什麼在編號後看到.0?因爲在格式化之後,年份部分實際上是一個字符串,並且當您將其減去時,它將轉換爲某個浮點數。

要解決它,只需在服務器中執行此操作。 :)

那麼還有一種方法可以在JSP中這樣做。

在數字(即#currentDate2YEAR - 1h)後面加上h,它將向OGNL表明這是一個BigInteger而不是浮點數。

<s:bean var="currentDate" name="java.util.Date" /> 
<s:date var="currentDate2YEAR" name="#currentDate" format="yyyy" /> 
<br>(YEAR) = <s:property value="#currentDate2YEAR" /> 
<br>(YEAR -1) = <s:property value="#currentDate2YEAR - 1h" />