如何使用JSTL和EL将java.util.Date
值与String
进行比较?
这是模型:
private Date myDate; // Wed Jan 01 00:00:00 CET 1001
这是观点:
<c:if test="#{bean.myDate eq 'Wed Jan 01 00:00:00 CET 1001'}">
<h:outputText value="#{bean.myDate}">
<f:convertDateTime pattern="EEEE dd MMM yyyy @ HH:mm:ss" />
</h:outputText>
</c:if>
但是条件总是评估为false。我怎么解决呢?
答案 0 :(得分:7)
如果您的环境支持EL 2.2,请直接调用其toString()
方法。
<c:if test="#{bean.myDate.toString() eq 'Wed Jan 01 00:00:00 CET 1001'}">
如果您没有,请首先将其转换为String
,然后将其作为<c:set>
的正文进行内联。
<c:set var="myDate">#{bean.myDate}</c:set>
<c:if test="#{myDate eq 'Wed Jan 01 00:00:00 CET 1001'}">
无关,这是比较日期的一种相当奇怪的方式。它对区域设置和时区的更改非常敏感(如果网页访问者使用非英语语言环境,并且您的webapp支持非英语语言环境,那么Wed Jan
上的测试将失败,如果将Web服务器移动到非CET时区,那么CET
上的测试就会失败)。您不想直接在1001
年或1001-01-01
左右的固定模式进行比较吗?此外,我也想知道为什么你不在JSF rendered
组件的<h:outputText>
属性中进行测试。
答案 1 :(得分:0)
在jsf 1.2
中此代码适用于我:
<webuijsf:button
actionExpression="#{guiRettificaBilPuntuale_2.button4_action}"
id="button4" text="#{bundle.TastoModificaRiga}"
rendered="#{ bilDetailsTable.value.settStatus eq 'N' or bilDetailsTable.value.starttime eq aLGUISessionBean_01.monthCurrentPublBilDate ? false : true}">
和starttime以及monthCurrentPublBilDate都是日期(java.Date),因此您可以在Date中转换字符串并比较它们