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

Kar*_*ara 3 jsf jstl el

如何使用JSTL和EL 来比较java.util.Date价值String

这是模型:

private Date myDate; // Wed Jan 01 00:00:00 CET 1001
Run Code Online (Sandbox Code Playgroud)

这是观点:

<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>
Run Code Online (Sandbox Code Playgroud)

但是,条件始终评估为false.怎么解决呢?

Bal*_*usC 7

如果您的环境支持EL 2.2,请toString()直接调用其方法.

<c:if test="#{bean.myDate.toString() eq 'Wed Jan 01 00:00:00 CET 1001'}">
Run Code Online (Sandbox Code Playgroud)

如果你没有,请将String其作为主体内联转换为第一个<c:set>.

<c:set var="myDate">#{bean.myDate}</c:set>
<c:if test="#{myDate eq 'Wed Jan 01 00:00:00 CET 1001'}">
Run Code Online (Sandbox Code Playgroud)

具体问题无关,这是比较日期的一种相当奇怪的方式.它对区域设置和时区的更改非常敏感(如果网页访问者使用非英语语言环境,并且您的webapp支持非英语语言环境,则测试Wed Jan将失败,如果Web服务器移动到非CET时区,则测试上CET会失败).难道你不想1001直接比较它或者像1001-01-01左右这样的固定模式吗?此外,我也想知道为什么你不在renderedJSF <h:outputText>组件的属性中进行测试.