2010-02-05 39 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