Bitte sehen Sie diese Ausdruckssprache
styleClass="#{obj.validationErrorMap eq null ? ' ' :
obj.validationErrorMap.contains('key')?'highlight_field':'highlight_row'}"
Auch wenn die Map null ist, wird der Stil highlight_row
Angewendet.
Also wechselte ich zu
styleClass="#{empty obj.validationErrorMap ? ' ' :
obj.validationErrorMap.contains('key')?'highlight_field':'highlight_row'}"
Selbst dann wird highlight_row
Angewendet.
Wenn die Karte empty OR null
ist, möchte ich nicht, dass ein Stil angewendet wird.
Irgendeine Hilfe? und Gründe für dieses Verhalten?
Verwenden Sie empty
(es überprüft sowohl die Nullheit als auch die Leerheit) und gruppieren Sie den verschachtelten ternären Ausdruck in Klammern (EL ist in bestimmten Implementierungen/Versionen nämlich etwas problematisch mit verschachtelten ternären Ausdrücken). Also, so:
styleClass="#{empty obj.validationErrorMap ? ' ' :
(obj.validationErrorMap.contains('key') ? 'highlight_field' : 'highlight_row')}"
Wenn immer noch vergebens (ich würde dann JBoss EL-Konfigurationen überprüfen), verwenden Sie den "normalen" EL-Ansatz:
styleClass="#{empty obj.validationErrorMap ? ' ' :
(obj.validationErrorMap['key'] ne null ? 'highlight_field' : 'highlight_row')}"
Update : Wie aus den Kommentaren hervorgeht, ist das Map
tatsächlich ein List
(bitte arbeiten Sie an Ihren Namenskonventionen) . Verwenden Sie JSTL fn:contains
, Um zu überprüfen, ob List
ein Element auf "normale" Weise enthält = (obwohl nicht explizit dokumentiert, funktioniert es auch für List
).
styleClass="#{empty obj.validationErrorMap ? ' ' :
(fn:contains(obj.validationErrorMap, 'key') ? 'highlight_field' : 'highlight_row')}"