проверка нуля на языке выражений jsf - PullRequest
51 голосов
/ 05 февраля 2010

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

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 Ответ

78 голосов
/ 05 февраля 2010

Используйте 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')}"
...