开发者

null check in jsf expression language

开发者 https://www.devze.com 2022-12-19 01:24 出处:网络
Please see this Expression Language styleClass=\"#{obj.validationErrorMap eq null ? \' \' : obj.validationErrorMap.contains(\'key\')?\'highlight_field\':\'highlight_row\'}\"

Please see this Expression Language

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

Even if the map is null, highlight_row style is getting applied.

So I changed to

styleClass="#{empty obj.validationErrorMap ? ' ' :  
     obj.validationEr开发者_运维技巧rorMap.contains('key')?'highlight_field':'highlight_row'}"

Even then, highlight_row is getting applied.

if the map is empty OR null I dont want any style to be applied.

Any help? and reasons for this behaviour?


Use empty (it checks both nullness and emptiness) and group the nested ternary expression by parentheses (EL is in certain implementations/versions namely somewhat problematic with nested ternary expressions). Thus, so:

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

If still in vain (I would then check JBoss EL configs), use the "normal" EL approach:

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

Update: as per the comments, the Map turns out to actually be a List (please work on your naming conventions). To check if a List contains an item the "normal" EL way, use JSTL fn:contains (although not explicitly documented, it works for List as well).

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

精彩评论

暂无评论...
验证码 换一张
取 消