2012-11-14 24 views
2

如何使用JSTL和EL将java.util.Date值与String进行比较?使用EL将java.util.Date值转换为字符串使用EL

这是模型:

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。我怎样才能解决它?

回答

6

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

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

如果你不通过内联它作为<c:set>身体将其转换为String第一。

<c:set var="myDate">#{bean.myDate}</c:set> 
<c:if test="#{myDate eq 'Wed Jan 01 00:00:00 CET 1001'}"> 

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

+0

我得到这个错误' var设置为空值或空值' –

+0

对不起,你是什么意思与“直接比较一年左右”? – perissf

+1

适用于Mojarra 2.1.14上的JSTL 1.2。我记得使用MyFaces时的一些问题。您使用的是JSF impl/version?什么JSTL版本?你的环境是否真的不支持EL 2.2?您之前提出的一些问题意味着您正在使用Java EE 6,因此隐式使用Servlet 3.0,因此隐式使用EL 2.2。你实际使用什么servletcontainer impl/version?至于每年的比较,只要检查一年是否等于1001或固定格式没有区域/时区敏感性,如'yyyy-MM-dd'。 – BalusC

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}"> 

和开始时间和monthCurrentPublBilDate是两个日期(java.Date),这样你就可以在日期变换串并加以比较