使用EL将java.util.Date值转换为字符串

时间:2012-11-14 13:11:41

标签: jsf jstl el

如何使用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。我怎么解决呢?

2 个答案:

答案 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中转换字符串并比较它们