使用EL将java.util.Date值转换为字符串使用EL
问题描述:
如何使用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。我怎样才能解决它?
答
如果您的环境支持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
属性中进行测试。
答
在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),这样你就可以在日期变换串并加以比较
我得到这个错误' var设置为空值或空值' –
对不起,你是什么意思与“直接比较一年左右”? – perissf
适用于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