55

请参阅此表达式语言

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我不希望应用任何样式。

有什么帮助吗?以及这种行为的原因?

4

1 回答 1

82

使用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(请按照您的命名约定工作)。要检查 a 是否以List“正常”EL 方式包含项目,请使用JSTL fn:contains(虽然没有明确记录,但它也适用List)。

styleClass="#{empty obj.validationErrorMap ? ' ' :  
 (fn:contains(obj.validationErrorMap, 'key') ? 'highlight_field' : 'highlight_row')}"
于 2010-02-05T13:07:34.733 回答