2011-09-12 16 views
8

Estoy tratando de verificar si existe una cookie en una página JSP utilizando el Lenguaje de Expresión.Compruebe si existe una cookie con JSP EL

Tengo una cookie llamada persist que se establece como una cadena vacía o "marcada".

Si desea comprobar si existe la cookie persist.

he intentado lo siguiente:

<c:if test="${cookie.persist == null}">

<c:if test="${empty cookie.persist}">

Tanto las declaraciones anteriores son true cuando el valor de la persist cookie es una cadena vacía y falsa cuando el valor de la cookie es checked.

¿Cómo puedo distinguir entre una cookie con la cadena vacía como su valor y una cookie que no existe?

(Nota: Yo puedo trabajar fácilmente alrededor de este problema mediante la asignación de un valor no vacío de la cookie en lugar de la cadena vacía.)

Respuesta

7

más cercano de lo que puede conseguir es para comprobar el nombre de la cookie en la solicitud cookie cabecera.

<c:if test="${fn:contains(header.cookie, 'persist=')}"> 

Sin embargo, cuando no hay otra galleta con el nombre foopersist, falla.

Si su contenedor admite EL 2.2 (todos los contenedores Servlet 3.0 como Tomcat 7, Glassfish 3, etc.) entonces puede usar Map#containsKey().

<c:if test="${cookie.containsKey('persist')}"> 

Si el suyo no lo hace, mejor de lo que puede hacer es crear una función de EL (ejemplo más concreto de declaración se puede encontrar en algún lugar cerca de la parte inferior this answer):

<c:if test="${util:mapContainsKey(cookie, 'persist')}"> 

con

public static boolean mapContainsKey(Map<String, Object> map, String key) { 
    return map.containsKey(key); 
} 
+0

Corrígeme si me equivoco, pero el segundo enfoque no me funciona. Obtuve los mismos resultados que usando '' – Mike

+0

El primer enfoque funciona bien. Mis cookies tienen un prefijo de aplicación, así que debería estar bien. – Mike

0

Si he entendido bien, que desea detectar que, o bien no existe o está vacío

EDITAR: ah. Para verificar que no existe, debe ser nulo y no estar vacío.

<c:if test="${cookie.persist == null && cookie.persist != ''}"> 
    Cookie doesn't exist 
    </c:if> 
+0

Solo estoy tratando de verificar que la cookie NO existe. – Mike

+1

Cuando uso '$ {cookie.persist == null}' devuelve verdadero si la cookie existe Y se establece en '' (cadena vacía) – Mike

0

utilizar el mapa de la galleta para comprobar que existe galleta o no ${cookie["persist"] == null}

espero que funcione

+2

Lo siento, no funcionó. '$ {cookie [" persist "] == null}' dio el mismo resultado que '$ {cookie.persist == null} ' – Mike

0

si se utiliza Tomcat 6+

<c:if test="${ ! empty cookie['persist']}"> 
Cookie doesn't exist 
</c:if> 
+4

Esta expresión no verifica si hay una cookie, pero si hay un valor de cookie. El problema concreto de OP es que también pasará cuando la cookie exista pero contenga un valor vacío. Por favor vuelve a leer la pregunta y todas las respuestas. – BalusC