52

JSFで列挙型の等価性をテストすることは可能ですか?

たとえば、stuffは次のenum Stuffとおりです。

<h:outputText value="text" rendered="#{mrBean.stuff == mrsBean.stuff}"/>
4

3 に答える 3

98

これは実際にはJSF関連よりもEL関連です。投稿した構成は有効ですが、EL2.1の列挙値は実際にはString値として評価されることに注意してください。String.valueOf(mrBean.getStuff())が等しい場合String.valueOf(mrsBean.getStuff())、コード例がレンダリングされます。EL 2.2では同じ構成が機能しますが、それらは真の列挙型として評価されます。

列挙値を返すには、実際にgetterメソッドが必要であることに注意してください。列挙型がとして扱われるという事実を考えると、String本質的には次のこともできます。

<h:outputText value="text" rendered="#{mrBean.stuff == 'FOO'}" />

現在のEL2.2バージョンでは、次のように列挙値に直接アクセスすることはできません。

<h:outputText value="text" rendered="#{mrBean.stuff == Stuff.FOO}" />

これは、 OmniFaces<o:importConstants>を使用する場合にのみ可能です。

<o:importConstants type="com.example.Stuff" />
...
<h:outputText value="text" rendered="#{mrBean.stuff == Stuff.FOO}" />
于 2010-03-26T16:28:35.847 に答える
37

列挙型がある場合

public enum Status {
    YES, NO
}

次のように、jsf ページで列挙型を参照できます。

<h:outputText value="text" rendered="#{myBean.status == 'YES'}"/>

列挙型を使用するためにいくつかのコードをリファクタリングしているときにつまずいたことがあるため、文字列の評価についてはよくわかりません:ステータス文字列にタイプミスがある場合、つまり:

<h:outputText value="text" rendered="#{myBean.status == 'YESSIR'}"/>

ELパーサーが「YESSIR」をStatus列挙型に強制しようとして失敗するため、実際にはページにアクセスするとランタイムエラーが発生します。

于 2010-03-26T21:00:59.577 に答える