JSFで列挙型の等価性をテストすることは可能ですか?
たとえば、stuff
は次のenum Stuff
とおりです。
<h:outputText value="text" rendered="#{mrBean.stuff == mrsBean.stuff}"/>
これは実際には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}" />
列挙型がある場合
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
列挙型に強制しようとして失敗するため、実際にはページにアクセスするとランタイムエラーが発生します。