2010-02-05 7 views
43

favor ver este lenguaje de expresióncheque nulo en lenguaje de expresión JSF

styleClass="#{obj.validationErrorMap eq null ? ' ' : 
    obj.validationErrorMap.contains('key')?'highlight_field':'highlight_row'}" 

Incluso si el mapa es nulo, se está aplicada highlight_row estilo.

Así que cambió a

styleClass="#{empty obj.validationErrorMap ? ' ' : 
    obj.validationErrorMap.contains('key')?'highlight_field':'highlight_row'}" 

Incluso entonces, highlight_row está siendo aplicada.
si el mapa es empty OR null No quiero que se aplique ningún estilo.

¿Algún ayuda? y las razones de este comportamiento?

+0

¿Está utilizando la extensión JBoss EL? – Bozho

+0

Creo que sí. jboss-el.jar está presente en la carpeta del servidor \ appl \ lib. – crazyTechie

Respuesta

71

Use empty (comprueba la nulidad y la vacuidad) y agrupe la expresión ternaria anidada entre paréntesis (EL está en ciertas implementaciones/versiones, es decir, algo problemático con expresiones ternarias anidadas). De este modo, por lo que:

styleClass="#{empty obj.validationErrorMap ? ' ' : 
(obj.validationErrorMap.contains('key') ? 'highlight_field' : 'highlight_row')}" 

Si todavía en vano (Me continuación, comprobar configuraciones JBoss EL), el uso "normal" enfoque de EL:

styleClass="#{empty obj.validationErrorMap ? ' ' : 
(obj.validationErrorMap['key'] ne null ? 'highlight_field' : 'highlight_row')}" 

actualización: según los comentarios, el Map resulta ser realmente un List (trabaje en sus convenciones de nomenclatura). Para verificar si un List contiene un artículo de la manera EL "normal", use JSTLfn:contains (aunque no está documentado explícitamente, también funciona para List).

styleClass="#{empty obj.validationErrorMap ? ' ' : 
(fn:contains(obj.validationErrorMap, 'key') ? 'highlight_field' : 'highlight_row')}" 
+0

Gracias. Voy a probar esto. validationErrorMap no es un mapa. Mi nombre incorrecto Lo siento. Su lista de matriz contiene una lista de campos de entrada que no han validado. – crazyTechie

+0

Gracias por su sugerencia en la actualización. Yo quería usar un mapa inicialmente. Así que di ese nombre. Pero más tarde cambió a la lista. La primera expresión funciona correctamente (usando paréntesis). Muchas gracias – crazyTechie

Cuestiones relacionadas