web-dev-qa-db-ja.com

JSFで列挙型の同等性をテストするにはどうすればよいですか?

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

例えば。ここで、stuffenum Stuff

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

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

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

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

現在のEL 2.2バージョンでは、cannot次のように列挙値に直接アクセスできます。

<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}" />
94
BalusC

列挙型がある場合

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列挙型に強制して失敗させるため、ページをヒットすると実際にランタイムエラーが発生します。

37
Naganalf

Enumでテストメソッドを定義できます。次のソースを参照してください。

列挙型の定義:

public enum MyEnum {
    FOO;
    public boolean isFoo(){
        return FOO.equals(this);
    }
}

JSFコード:

<h:outputText value="text" rendered="#{mrBean.stuff ne null and mrBean.stuff.foo}"/>
2
Pavel Sedek