¿Es posible probar la igualdad de enum en JSF?¿Cómo probar la igualdad enum en JSF?
E.g. donde stuff
es un enum Stuff
:
<h:outputText value="text" rendered="#{mrBean.stuff == mrsBean.stuff}"/>
¿Es posible probar la igualdad de enum en JSF?¿Cómo probar la igualdad enum en JSF?
E.g. donde stuff
es un enum Stuff
:
<h:outputText value="text" rendered="#{mrBean.stuff == mrsBean.stuff}"/>
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}" />
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.
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}"/>
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 –
¿De qué manera es preferible para esto? ¿Importa OmniFaces solo por este motivo? – alexander
@Alex: la manera que mejor se adapta a su aplicación. En cuanto a OmniFaces, ofrece mucho más que el ''. –
BalusC