2010-02-05 12 views
43

Si prega di vedere questo Expression Languagecontrollo nullo nel linguaggio delle espressioni JSF

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

Anche se la mappa è nullo, highlight_row stile è sempre applicata.

Così ho cambiato per

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

Anche allora, highlight_row sta ottenendo applicata.
se la mappa è empty OR null Non desidero applicare alcuno stile.

Qualsiasi aiuto? e ragioni per questo comportamento?

+0

stai usando l'estensione JBoss EL? – Bozho

+0

Penso di sì. jboss-el.jar è presente nella cartella server \ appl \ lib. – crazyTechie

risposta

71

Utilizzare empty (controlla sia nullness che vuoto) e raggruppare l'espressione ternaria nidificata per parentesi (EL si trova in alcune implementazioni/versioni in qualche modo problematico con espressioni ternarie nidificate). Così, in modo da:

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

Se ancora in vano (vorrei quindi controllare configurazioni JBoss EL), utilizzare il "normale" approccio EL:

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

Aggiornamento: come per i commenti, il Map risulta essere effettivamente un List (si prega di lavorare sulle convenzioni di denominazione). Per verificare se un elemento List contiene un elemento nel modo EL "normale", utilizzare JSTLfn:contains (anche se non esplicitamente documentato, funziona anche per List).

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

Grazie. Lo proverò. validationErrorMap non è una mappa. La mia denominazione errata. Scusate. Il suo elenco di array che contiene l'elenco dei campi di input che hanno fallito la convalida. – crazyTechie

+0

Grazie per il suggerimento nell'aggiornamento. Volevo usare inizialmente una mappa. Così ha dato quel nome. Ma in seguito è passato alla lista. La prima espressione funziona correttamente (utilizzando le parentesi). molte grazie – crazyTechie

Problemi correlati