verificação nulo na linguagem de expressão JSF
Pergunta
Por favor, veja este Expression Language
styleClass="#{obj.validationErrorMap eq null ? ' ' :
obj.validationErrorMap.contains('key')?'highlight_field':'highlight_row'}"
Mesmo que o mapa é nulo, estilo highlight_row
está sendo aplicada.
Então eu mudei para
styleClass="#{empty obj.validationErrorMap ? ' ' :
obj.validationErrorMap.contains('key')?'highlight_field':'highlight_row'}"
Mesmo assim, highlight_row
está sendo aplicada.
se o mapa é empty OR null
Eu não quero qualquer estilo a ser aplicado.
Qualquer ajuda? e razões para este comportamento?
Solução
Uso empty
(que verifica tanto nullness e vazio) e grupo a expressão ternário aninhada por parênteses (EL é em certas implementações / versões nomeadamente um pouco problemáticas com expressões ternárias aninhados). Assim, por isso:
styleClass="#{empty obj.validationErrorMap ? ' ' :
(obj.validationErrorMap.contains('key') ? 'highlight_field' : 'highlight_row')}"
Se ainda estiver em vão (Eu, então, verificar JBoss EL configs), usar a abordagem "normal" EL:
styleClass="#{empty obj.validationErrorMap ? ' ' :
(obj.validationErrorMap['key'] ne null ? 'highlight_field' : 'highlight_row')}"
Atualizar : de acordo com os comentários, o Map
acaba por ser realmente uma List
(por favor, trabalho em suas convenções de nomenclatura). Para verificar se um List
contém um item do EL maneira "normal", use JSTL fn:contains
(embora não explicitamente documentadas, ele funciona para List
também).
styleClass="#{empty obj.validationErrorMap ? ' ' :
(fn:contains(obj.validationErrorMap, 'key') ? 'highlight_field' : 'highlight_row')}"