小编典典

jsf表达式语言中的null检查

java

请查看此表达语言

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

即使地图为null,highlight_row也会应用样式。

所以我改为

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

即使这样,highlight_row也正在得到应用。
如果地图是empty OR null我不想应用任何样式。

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


阅读 272

收藏
2020-12-03

共1个答案

小编典典

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