Проверка нуля на языке выражений 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')}"