null check in JSF expression language

Zobacz ten język wyrażeń

styleClass="#{obj.validationErrorMap eq null ? ' ' :  
     obj.validationErrorMap.contains('key')?'highlight_field':'highlight_row'}"

Nawet jeśli mapa jest null, styl highlight_row zostanie zastosowany.

Więc zmieniłem na

styleClass="#{empty obj.validationErrorMap ? ' ' :  
     obj.validationErrorMap.contains('key')?'highlight_field':'highlight_row'}"

Nawet wtedy, highlight_row jest stosowany.
jeśli mapa jest empty OR null nie chcę stosować żadnego stylu.

Jakaś pomoc? a powody takiego zachowania?
 46
Author: BalusC, 2010-02-05

1 answers

Użyj empty (sprawdza zarówno nullness, jak i Empty) i pogrupuj zagnieżdżone wyrażenie trójkowe według nawiasów (EL jest w niektórych implementacjach/wersjach, a mianowicie nieco problematyczne z zagnieżdżonymi wyrażeniami trójkowymi). Tak więc:

styleClass="#{empty obj.validationErrorMap ? ' ' :  
 (obj.validationErrorMap.contains('key') ? 'highlight_field' : 'highlight_row')}"

Jeśli nadal na próżno (sprawdziłbym wtedy JBoss el configs), użyj "normalnego" podejścia EL:

styleClass="#{empty obj.validationErrorMap ? ' ' :  
 (obj.validationErrorMap['key'] ne null ? 'highlight_field' : 'highlight_row')}"

Update: zgodnie z komentarzami, Map okazuje się być List (Proszę popracować nad konwencjami nazewnictwa). Aby sprawdzić, czy a List zawiera element "normalny" sposób EL, użyj JSTL fn:contains (chociaż nie jest to wyraźnie udokumentowane, działa również dla List).

styleClass="#{empty obj.validationErrorMap ? ' ' :  
 (fn:contains(obj.validationErrorMap, 'key') ? 'highlight_field' : 'highlight_row')}"
 74
Author: BalusC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-05 13:26:41