【问题标题】:null check in jsf expression languagejsf表达式语言中的null检查
【发布时间】:2011-01-13 12:24:24
【问题描述】:

请查看此表达式语言

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

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

【问题讨论】:

  • 你在使用 JBoss EL 扩展吗?
  • 我认为是的。 jboss-el.jar 存在于 server\appl\lib 文件夹中。

标签: java jsf el


【解决方案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')}"

更新:根据 cmets,Map 实际上是 List(请按照您的命名约定进行操作)。要检查 List 是否包含“正常”EL 方式的项目,请使用 JSTL fn:contains(虽然没有明确记录,但它也适用于 List)。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-06
    • 2011-06-24
    • 2015-02-03
    • 1970-01-01
    • 2012-07-05
    • 2012-10-19
    • 1970-01-01
    • 2013-03-20
    相关资源
    最近更新 更多