2012-11-14 25 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),這樣你就可以在日期變換串並加以比較