web-dev-qa-db-fra.com

Comment tester l'égalité enum dans JSF?

Est-il possible de tester l'égalité enum dans JSF?

Par exemple. où stuff est un enum Stuff:

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

C'est en fait plus lié à EL qu'à JSF. La construction telle que vous l'avez publiée est valide, mais vous devez garder à l'esprit que les valeurs énumérées dans EL 2.1 sont en fait évaluées comme des valeurs String. Si String.valueOf(mrBean.getStuff()) est égal à String.valueOf(mrsBean.getStuff()), votre exemple de code sera rendu. Dans EL 2.2, la même construction fonctionnera, mais elles sont évaluées comme de véritables énumérations.

Notez qu'il nécessite en effet une méthode getter pour renvoyer la valeur enum. Étant donné que les énumérations sont traitées comme String, vous pouvez essentiellement faire simplement:

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

Dans la version actuelle d'EL 2.2, vous ne pouvez pas accéder directement aux valeurs d'énumération comme ceci:

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

Cela n'est possible que lorsque vous utilisez OmniFaces <o:importConstants> :

<o:importConstants type="com.example.Stuff" />
...
<h:outputText value="text" rendered="#{mrBean.stuff == Stuff.FOO}" />
94
BalusC

Si vous avez l'énumération

public enum Status {
    YES, NO
}

vous pouvez référencer les énumérations dans vos pages jsf comme ceci:

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

Je ne suis pas sûr de l'évaluation de String, à cause de quelque chose sur laquelle je suis tombé en refactorisant du code pour utiliser des énumérations: si vous avez une faute de frappe dans votre chaîne de statut, c'est-à-dire:

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

vous obtiendrez en fait une erreur d'exécution lorsque vous accéderez à la page, car l'analyseur EL tentera de forcer 'YESSIR' dans une énumération Status et échouera.

37
Naganalf

Vous pouvez définir des méthodes de test sur l'énumération, voir la source suivante.

Définition de l'énumération:

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

Code JSF:

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