Проверка нуля на языке выражений jsf

Пожалуйста, смотрите этот язык выражения

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

Даже если карта пуста, highlight_row стиль применяется.

Итак, я изменился на

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

Даже тогда, highlight_row применяется
если карта empty OR null Я не хочу, чтобы какой-либо стиль применялся.

Любая помощь? а причины такого поведения?

1 ответ

Решение

Использование empty (он проверяет как пустоту, так и пустоту) и группирует вложенное троичное выражение по скобкам (EL в некоторых реализациях / версиях, а именно, несколько проблематично с вложенными троичными выражениями). Итак, так:

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

Если все еще напрасно (я бы тогда проверил конфиги JBoss EL), используйте "нормальный" подход EL:

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

Обновление: согласно комментариям, Map оказывается на самом деле List (пожалуйста, работайте над соглашениями об именах). Чтобы проверить, если List содержит элемент "обычным" способом EL, используйте JSTL fn:contains(хотя явно не задокументировано, это работает для List также).

styleClass="#{empty obj.validationErrorMap ? ' ' :  
 (fn:contains(obj.validationErrorMap, 'key') ? 'highlight_field' : 'highlight_row')}"
Другие вопросы по тегам