2010-03-26 5 views

Antwort

77

Dies wird EL tatsächlich mehr verwandt als JSF bezogen. Das Konstrukt, wie Sie es veröffentlicht haben, ist gültig, aber Sie sollten beachten, dass Enum-Werte in EL 2.1 tatsächlich als String Werte ausgewertet werden. Wenn String.valueOf(mrBean.getStuff()) gleich String.valueOf(mrsBean.getStuff()) ist, wird das Codebeispiel gerendert. In EL 2.2 funktioniert das gleiche Konstrukt, aber sie werden als echte Enums ausgewertet.

Beachten Sie, dass tatsächlich eine Getter-Methode zum Zurückgeben des Enum-Werts erforderlich ist. In Anbetracht der Tatsache, dass Aufzählungen wie String behandelt werden, können Sie im Grunde tun auch nur:

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

In aktuellen EL Version 2.2, Sie kann nicht Zugang ENUM-Werte direkt wie folgt aus:

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

Diese nur dann möglich ist, wenn Sie OmniFaces <o:importConstants> verwenden:

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

Ich habe ein ähnliches Problem wie das, was Sie erwähnen: In Managed Bean I 'Stuff stuff' haben, und in meiner JSF Ich versuche' # {stuff.FOO} ', und es funktioniert nicht. Wenn Sie eine Getter-Methode für die Rückgabewerte angegeben haben, können Sie mit dem Beispiel FOO, BAR etwas genauer sein. Ich habe eine separate Frage gestellt, falls Sie meine Struktur besser sehen wollen. http://stackoverflow.com/questions/3916871/passing-a-enum-value-as-a-parameter-from-jsf –

+0

Welcher Weg ist vorzuziehen? Importieren OmniFaces nur aus diesem Grund Overhead? – alexander

+0

@Alex: der Weg, der am besten zu Ihrer Anwendung passt. Was OmniFaces angeht, bietet es viel mehr als nur die '<: importConstants>'. – BalusC

36

Wenn Sie die enum haben

public enum Status { 
    YES, NO 
} 

können Sie die Aufzählungen in Ihrer JSF-Seiten wie so Referenz:

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

ich über die String Auswertung nicht so sicher bin, wegen etwas, das ich gestolpert, während einige Code Refactoring Aufzählungen zu verwenden : wenn Sie einen Tippfehler in Ihrem Status String haben, das heißt:

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

werden Sie tatsächlich einen Laufzeitfehler erhalten, wenn Sie die Seite, weil der EL-Parser getroffen werden versuchen, ‚YesSir‘ in eine Status enum und fa zu zwingen il.

1

Sie könnten Testmethoden für die Enumeration definieren, siehe folgende Quelle.

Enum-Definition:

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

JSF Code:

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