null检查jsfexpression式语言

请看这个expression式语言

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我不希望任何风格被应用。

任何帮助? 和这种行为的原因?

使用empty (同时检查无效和空白),并通过圆括号嵌套三元expression式(EL在某些实现/版本中,即嵌套三元expression式有点问题)。 因此,所以:

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

如果仍然徒劳(我会检查JBoss ELconfiguration),使用“正常”EL方法:

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

更新 :根据评论, Map变成实际上是一个List (请工作你的命名约定)。 要检查List包含一个“正常”EL方式的项目,请使用JSTL fn:contains (虽然没有明确logging,但也适用于List )。

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