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?

Foi útil?

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')}"
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top