null检查jsf表达式语言

时间:2010-02-05 12:53:02

标签: java jsf el

请参阅此表达语言

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 个答案:

答案 0 :(得分:78)

使用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')}"