3

JSTLとELjava.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と評価されます。どうすれば解決できますか?

4

2 に答える 2

7

ご使用の環境がEL2.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'}">

具体的な問題とは関係なく、これは日付を比較するかなり奇妙な方法です。ロケールとタイムゾーンの変更に非常に敏感です(Webページの訪問者が英語以外のロケールを使用し、Webアプリが英語以外のロケールをサポートしているWed Jan場合、テストは失敗し、WebサーバーがCET以外のタイムゾーンに移動された場合、テストonCETは失敗します)。1001直接、またはそのような固定パターンでそれを比較したい1001-01-01ですか?さらに、なぜrenderedJSF<h:outputText>コンポーネントの属性でテストを行わないのか疑問に思います。

于 2012-11-14T13:24:04.880 に答える
0

jsf1.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の文字列を変換して比較できます

于 2013-06-07T10:14:57.753 に答える