web-dev-qa-db-fra.com

vérification nulle dans le langage d'expression jsf

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?

51
crazyTechie

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')}"
78
BalusC