Подтвердить что ты не робот

Null проверить язык выражения jsf

См. этот язык выражений

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

Даже если отображение равно null, применяется стиль highlight_row.

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

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

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

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

4b9b3361

Ответ 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')}"