2012-05-10 18 views
6

voglio fare qualcosa di simile:confronto char a EL espressione

<c:if test="${somestring.charAt(0)=='1'}"> 
tadaaaam 
</c:if> 

quando somestring è "11011", ma non funziona. Posso stamparlo con

${somestring.charAt(0)} 

ed è "1" ma il confronto sopra non riesce. Il seguente confronto:

if(somestring.charAt(0)=='1') 

worx (condizione è vera) in puro Java.

Qualche idea?

+0

Impossibile riprodurre su tomcat 7. Forse potresti mostrarci il codice effettivo che non funziona? – Affe

+0

Lo eseguo su Tomcat 7. Forse non hai aggiunto la libreria JSTL al tuo progetto –

risposta

8

EL sembra avere problemi con char. Ecco l'unico modo per farlo funzionare.

<c:if test="${somestring.charAt(0) == '1'.charAt(0)}" > 
    tadaaaam 
</c:if> 
+0

Grazie, funziona così :) Non sapevo che '1' è String in questo caso. –

7

Il comportamento è esattamente come previsto e richiesto dalle specifiche EL. Se si utilizza la versione 2.2 delle specifiche EL, è necessario consultare la sezione 1.8.2 che fornisce le regole per l'operatore '=='.

Gli operandi in questo caso sono somestring.charAt(0) che è un char e '1' che è un String (non un char) dal Corde può essere delimitata da singoli apici o doppie in EL.

Dato che abbiamo Character == String, si applica il sesto punto elenco di 1.8.2 ed entrambi sono forzati a valori Long. Il personaggio sarà forzato a 49 (il codice ASCII per 1) e 1 è forzato a 1. Questi non sono uguali quindi il risultato che vedi.

Apprezzo che questo non è quello che ci si aspetterebbe ma è il comportamento richiesto dalle specifiche e viene attivato dal fatto che le singole virgolette in EL delimitano le stringhe non i caratteri.

+0

Grazie per la risposta. '1' è come String, infatti. Ho sbagliato a pensare che sia un personaggio, devo leggere più specifiche :) –

Problemi correlati