2010-03-26 20 views

Respuesta

77

Esto se relaciona en realidad más que JSF EL relacionados. El constructo tal como lo publicó es válido, pero debe tener en cuenta que los valores enum que se encuentran en EL 2.1 en realidad se evalúan como valores String. Si String.valueOf(mrBean.getStuff()) es igual a String.valueOf(mrsBean.getStuff()), se renderizará su ejemplo de código. En EL 2.2, el mismo constructo funcionará, pero se evalúan como enumeraciones verdaderas.

Tenga en cuenta que de hecho requiere un método getter para devolver el valor enum. Teniendo en cuenta el hecho de que las enumeraciones son tratados como String, puede, en esencia, también acaba de hacer:

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

En la actual versión EL 2.2, no puede valores de acceso de enumeración directamente como esto:

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

Este sólo es posible cuando se utilice OmniFaces <o:importConstants>:

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

tengo un problema similar como lo que mencionas: En el bean administrado 'Tengo cosas stuff', y en mi JSF trato' # {stuff.FOO} ', y no funciona. Cuando dices un método getter los valores enum de retorno, puedes ser un poco más específico con el ejemplo FOO, BAR que tienes. Formulé una pregunta por separado en caso de que desee ver mejor mi estructura. http://stackoverflow.com/questions/3916871/passing-a-enum-value-as-a-parameter-from-jsf –

+0

¿De qué manera es preferible para esto? ¿Importa OmniFaces solo por este motivo? – alexander

+0

@Alex: la manera que mejor se adapta a su aplicación. En cuanto a OmniFaces, ofrece mucho más que el ''. – BalusC

36

Si usted tiene la enumeración

public enum Status { 
    YES, NO 
} 

puede hacer referencia a las enumeraciones en sus páginas JSF de esta manera:

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

no estoy tan seguro acerca de la evaluación de cuerda debido a que algo me topé mientras refactorización algo de código para utilizar enumeraciones : si tiene un error tipográfico en su cadena de estado, es decir:

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

que se va a conseguir un error de ejecución cuando se pulse la página porque el analizador eL intentará coaccionar 'YESSIR' en una enumeración y FA Status Illinois.

1

Puede definir métodos de prueba en la enumeración, consulte la siguiente fuente.

Enum definición: Código

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}"/> 
Cuestiones relacionadas