Veuillez voir ce langage d'expression
styleClass="#{obj.validationErrorMap eq null ? ' ' :
obj.validationErrorMap.contains('key')?'highlight_field':'highlight_row'}"
Même si la carte est nulle, highlight_row
le style est appliqué.
J'ai donc changé pour
styleClass="#{empty obj.validationErrorMap ? ' ' :
obj.validationErrorMap.contains('key')?'highlight_field':'highlight_row'}"
Même à ce moment là, highlight_row
est appliqué.
si la carte est empty OR null
Je ne veux appliquer aucun style.
De l'aide? et les raisons de ce comportement?
Utilisez empty
(il vérifie à la fois la nullité et la vacuité) et groupez l'expression ternaire imbriquée par parenthèses (EL est dans certaines implémentations/versions à savoir quelque peu problématique avec les expressions ternaires imbriquées). Ainsi donc:
styleClass="#{empty obj.validationErrorMap ? ' ' :
(obj.validationErrorMap.contains('key') ? 'highlight_field' : 'highlight_row')}"
Si toujours en vain (je vérifierais alors les configurations JBoss EL), utilisez l'approche EL "normale":
styleClass="#{empty obj.validationErrorMap ? ' ' :
(obj.validationErrorMap['key'] ne null ? 'highlight_field' : 'highlight_row')}"
Mise à jour : selon les commentaires, le Map
se révèle être en fait un List
(veuillez travailler votre nom conventions). Pour vérifier si un List
contient un élément de la manière EL "normale", utilisez JSTL fn:contains
(bien que non explicitement documenté, il fonctionne également pour List
).
styleClass="#{empty obj.validationErrorMap ? ' ' :
(fn:contains(obj.validationErrorMap, 'key') ? 'highlight_field' : 'highlight_row')}"