Struts2 taglib 日期计算去除小数
Struts2 taglib dates calculation remove decimals
我正在使用 Struts2 taglib 生成降序年份列表(2016
、2015
等)。
我正在使用日期标签从 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 ==>
有许多方法可以做到这一点,和往常一样,更好的方法是涉及服务器端的方法,将视图中的逻辑减少到生理上的最低限度。顺便说一下,如果你需要在视图中这样做,试试这样:
<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}" />
它也可以在迭代器中编写脚本,如果您可以 post 更多关于您正在做的事情的详细信息,这将有所帮助,如果这不起作用或不够。
首先:不要在视图中做那种事情,而是在后端构造一个列表,在视图中迭代它。
其次:您使用的是 Struts2 的一些旧版本,这就是允许此 -> <s:set value="%{new java.util.Date()}"/>
的原因。在最新版本中,您不能以这种方式在 JSP 中创建新实例。您可以使用 <s:bean>
标签来做到这一点。
第三:为什么在数字后面看到.0
?因为在格式化之后,年份部分实际上是一个字符串,当你减去它时会转换为一些浮点数。
要绕过它,只需在服务器中执行即可。 :)
好吧,在 JSP 中也有一种方法可以做到这一点。
在数字后添加 h
(即 #currentDate2YEAR - 1h
),这将向 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" />
我找到了这个解决方案并且有效(它使用 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()" />
我正在使用 Struts2 taglib 生成降序年份列表(2016
、2015
等)。
我正在使用日期标签从 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 ==>
有许多方法可以做到这一点,和往常一样,更好的方法是涉及服务器端的方法,将视图中的逻辑减少到生理上的最低限度。顺便说一下,如果你需要在视图中这样做,试试这样:
<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}" />
它也可以在迭代器中编写脚本,如果您可以 post 更多关于您正在做的事情的详细信息,这将有所帮助,如果这不起作用或不够。
首先:不要在视图中做那种事情,而是在后端构造一个列表,在视图中迭代它。
其次:您使用的是 Struts2 的一些旧版本,这就是允许此 -> <s:set value="%{new java.util.Date()}"/>
的原因。在最新版本中,您不能以这种方式在 JSP 中创建新实例。您可以使用 <s:bean>
标签来做到这一点。
第三:为什么在数字后面看到.0
?因为在格式化之后,年份部分实际上是一个字符串,当你减去它时会转换为一些浮点数。
要绕过它,只需在服务器中执行即可。 :)
好吧,在 JSP 中也有一种方法可以做到这一点。
在数字后添加 h
(即 #currentDate2YEAR - 1h
),这将向 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" />
我找到了这个解决方案并且有效(它使用 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()" />