web-dev-qa-db-ja.com

jsf式言語でのnullチェック

この表現言語をご覧ください

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スタイルを適用したくない。

助けがありますか?そしてこの行動の理由は?

51
crazyTechie

empty(nullnessとemptynessの両方をチェックします)を使用し、ネストされた3進表現を括弧でグループ化します(ELは特定の実装/バージョン、つまりネストされた3進表現で多少問題があります)。したがって、そう:

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')}"

Update:コメントによると、Mapは実際にはListであることがわかります(名前の付け方に注意してください)規則)。 Listに「通常の」EL方法でアイテムが含まれているかどうかを確認するには、 [〜#〜] jstl [〜#〜]fn:contains (明示的に文書化されていませんが、Listでも機能します)。

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