2010-02-05 47 views
43

请参阅此表达式语言空检查

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

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

+0

你使用的是JBoss EL扩展吗? – Bozho 2010-02-05 12:56:35

+0

我想是的。 jboss-el.jar存在于server \ appl \ lib文件夹中。 – crazyTechie 2010-02-05 13:03:35

回答

71

使用empty(它同时检查无效性和空白性),并通过括号(EL在某些实现/版本中对嵌套的三元表达式有些问题)对嵌套的三元表达式进行分组。因此,所以:

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

如果仍然徒劳(然后我会检查的JBoss EL CONFIGS),使用 “正常” EL做法:

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

更新:根据的意见, Map原来实际上是一个List(请按照您的命名约定)。要检查List是否包含“正常”EL方式的项目,请使用JSTLfn:contains(虽然没有明确记录,但它也适用于List)。

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

谢谢。我会测试这个。 validationErrorMap不是地图。我的命名不正确。抱歉。它的数组列表包含未通过验证的输入字段列表。 – crazyTechie 2010-02-05 13:16:33

+0

感谢您提供更新中的建议。我最初想使用地图。所以给了这个名字。但后来改为列表。 第一个表达式正常工作(使用圆括号)。非常感谢 – crazyTechie 2010-02-05 13:31:15