2012-05-10 16 views
6
expresión

Quiero hacer algo como esto:comparación carbón en El

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

cuando someString es "11011", pero no funciona. Puedo imprimirlo con

${somestring.charAt(0)} 

y es '1' pero la comparación anterior falla. La siguiente comparación:

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

worx (condición es verdadera) en Java puro.

¿Alguna idea?

+0

No se puede reproducir en tomcat 7. ¿Tal vez podría mostrarnos el código real que no funciona? – Affe

+0

Lo ejecuto en Tomcat 7. Quizás no agregó la biblioteca JSTL a su proyecto –

Respuesta

8

EL parece tener problemas con el char. Esta es la única forma en que podría hacerlo funcionar.

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

Gracias, funciona de esa manera :) No sabía que '1' es String en este caso. –

7

El comportamiento es exactamente el esperado y lo exige la especificación EL. Si toma la versión 2.2 de la especificación EL, debe consultar la sección 1.8.2 que proporciona las reglas para el operador '=='.

Los operandos en este caso son somestring.charAt(0) que es un char y '1' que es un String (no un char) desde Strings puede estar delimitado por comillas simples o dobles en EL.

Dado que tenemos Character == String, entonces se aplica la sexta viñeta de 1.8.2 y ambos son forzados a valores Long. El personaje será forzado a 49 (el código ASCII para 1) y 1 se coaccionará a 1. Estos no son iguales, por lo tanto, el resultado que verá.

Aprecio que esto no es lo que esperaría, pero es el comportamiento que requiere la especificación y se desencadena por el hecho de que las comillas simples en EL delimitan cadenas no caracteres.

+0

Gracias por su respuesta. '1' es como String, de hecho. Me equivoqué al pensar que es un personaje, tengo que leer más especificaciones :) –

Cuestiones relacionadas