2010-11-16 20 views
10

Estoy tratando de comparación de cadenas conJSTL comparación de cadenas siempre devuelve falsa

<c:if test="${dept eq 'account'}"></c:if> 

Pero esto siempre devuelve false. Verifico que la variable del departamento tenía el valor 'account'. También probé como esto

<c:if test="${dept == 'account'}"></c:if> 

Esto también devuelve false.

Pero si uso el código de Java como éste, entonces funciona bien

<% 
if(dept.equals("account")){ 

blah blah blah 
} 

%> 

Cualquier ayuda sería muy apreciada.

Gracias

+0

¿Qué quiere decir con "returns false"? ¿Seguro que las etiquetas '' se están ejecutando? – skaffman

Respuesta

13

Los síntomas indican que se ha declarado en el ámbito scriplet, no en el ámbito EL. Scriptlets y EL no comparte el mismo alcance. EL usa debajo de las cubiertas PageContext#findAttribute() para resolver la variable. Ponga dept en uno de los ámbitos de la página, solicitud, sesión o aplicación. Cuál elegir depende del único propósito de dept. Comenzaría con el alcance de la solicitud. P.ej. en un servlet:

request.setAttribute("dept", dept); 

De esta manera será disponible en EL por ${dept}.

Después de todo, lo mejor es evitar el uso de scriptletscompletely. El código de Java pertenece a las clases de Java, no a los archivos JSP.

+0

¡Excelente! Esta es la respuesta perfecta. Muchas gracias por su tiempo. Esto está funcionando bien. Creo que EL no pudo encontrar la variable de departamento en ningún ámbito. Tan pronto como lo pongo en el alcance de la solicitud, comienza a funcionar bien. – user509755

+0

De nada. – BalusC

Cuestiones relacionadas