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