55 Stimmen

null check in jsf expression language

Bitte beachten Sie diese Expression Language

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

Auch wenn die Karte leer ist, highlight_row Stil angewandt wird.

Also bin ich zu

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

Selbst dann, highlight_row angewendet wird.
wenn die Karte empty OR null Ich möchte nicht, dass irgendein Stil angewendet wird.

Gibt es Hilfe und Gründe für dieses Verhalten?

82voto

BalusC Punkte 1034465

Utilice empty (es prüft sowohl die Nichtigkeit als auch die Leere) und gruppiert den verschachtelten ternären Ausdruck durch Klammern (EL ist in bestimmten Implementierungen/Versionen nämlich etwas problematisch mit verschachtelten ternären Ausdrücken). Also, also:

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

Wenn das immer noch vergeblich ist (ich würde dann die 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 in den Kommentaren erwähnt, ist die Map entpuppt sich tatsächlich als ein List (bitte arbeiten Sie an Ihren Namenskonventionen). Um zu prüfen, ob ein List einen Artikel auf die "normale" EL-Art enthält, verwenden Sie JSTL fn:contains (obwohl nicht explizit dokumentiert, funktioniert es für List auch).

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X