lenguaje - jtls java
comprobación nula en lenguaje de expresión jsf (1)
Por favor vea este Lenguaje de Expresión
styleClass="#{obj.validationErrorMap eq null ? '' '' :
obj.validationErrorMap.contains(''key'')?''highlight_field'':''highlight_row''}"
Incluso si el mapa es nulo, se aplicará el estilo de highlight_row
.
Entonces cambié a
styleClass="#{empty obj.validationErrorMap ? '' '' :
obj.validationErrorMap.contains(''key'')?''highlight_field'':''highlight_row''}"
Incluso entonces, highlight_row
se está aplicando.
si el mapa está empty OR null
, no quiero que se aplique ningún estilo.
¿Alguna ayuda? y las razones de este comportamiento?
Use empty
(comprueba la nulidad y el vacío) y agrupe la expresión ternaria anidada entre paréntesis (EL está en ciertas implementaciones / versiones, es decir, un tanto problemática con expresiones ternarias anidadas). Por lo tanto, así que:
styleClass="#{empty obj.validationErrorMap ? '' '' :
(obj.validationErrorMap.contains(''key'') ? ''highlight_field'' : ''highlight_row'')}"
Si todavía es en vano (yo verificaría las configuraciones de JBoss EL), use el enfoque EL "normal":
styleClass="#{empty obj.validationErrorMap ? '' '' :
(obj.validationErrorMap[''key''] ne null ? ''highlight_field'' : ''highlight_row'')}"
Actualización : según los comentarios, el Map
resulta ser realmente una List
(trabaje en sus convenciones de nombres). Para verificar si una List
contiene un elemento de la forma EL "normal", use JSTL fn: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'')}"