2010-02-05 14 views
43

sehen Sie bitte diese Expression LanguageNULL-Prüfung in JSF Expression Language

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

Auch wenn die Karte leer ist, wird highlight_row Stil angewandt zu werden. So änderte

ich

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

Selbst dann wird highlight_row angewendet zu werden.
Wenn die Karte empty OR null ist Ich möchte keinen Stil angewendet werden.

Irgendwelche Hilfe? und Gründe für dieses Verhalten?

+0

verwenden Sie die JBoss EL-Erweiterung? – Bozho

+0

Ich denke ja. jboss-el.jar ist im Ordner Server \ appl \ lib vorhanden. – crazyTechie

Antwort

71

Verwenden Sie empty (es prüft sowohl Nullheit und Leere) und gruppieren Sie die verschachtelten ternären Ausdruck durch Klammern (EL ist in bestimmten Implementierungen/Versionen nämlich etwas problematisch mit verschachtelten ternären Ausdrücke). So so:

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

Wenn noch vergeblich (würde ich dann überprüfen JBoss EL configs), verwenden Sie den "normalen" EL Ansatz:

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

aktualisieren: nach den Kommentaren, die Map entpuppt sich als List (bitte beachten Sie Ihre Namenskonventionen). Um zu überprüfen, ob ein List einen Artikel enthält, den "normalen" EL-Weg, verwenden Sie JSTLfn:contains (obwohl nicht explizit dokumentiert, funktioniert es auch für List).

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

Danke. Ich werde das testen. validationErrorMap ist keine Zuordnung. Meine falsche Benennung. Es tut uns leid. Seine Array-Liste, die eine Liste von Eingabefeldern enthält, bei denen die Validierung fehlgeschlagen ist. – crazyTechie

+0

Danke für den Vorschlag im Update. Ich wollte zunächst eine Karte verwenden. Also gab diesen Namen. Aber später in die Liste geändert. Der erste Ausdruck funktioniert einwandfrei (mit Klammern). Danke vielmals – crazyTechie

Verwandte Themen