2011-09-12 23 views
8

Sto cercando di verificare se un cookie esiste su una pagina JSP utilizzando la lingua di espressione.Verificare se Cookie esiste con JSP EL

Ho un cookie chiamato persist che è impostato su una stringa vuota o "checked".

Se si desidera verificare se esiste il cookie persist.

Ho provato quanto segue:

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

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

Entrambe le dichiarazioni di cui sopra sono true quando il valore del cookie persist è la stringa vuota e falsa quando il valore del cookie è checked.

Come faccio a distinguere tra un cookie con la stringa vuota come valore e un cookie che non esiste.

(Nota: posso facilmente aggirare il problema assegnando un valore non vuoto al cookie invece che una stringa vuota.)

risposta

7

più vicino quello che si può ottenere è quello di verificare il nome del cookie nella richiesta cookie intestazione.

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

Tuttavia, quando c'è un altro cookie con nome foopersist, fallisce.

Se il contenitore supporta EL 2.2 (tutti i contenitori Servlet 3.0 come Tomcat 7, Glassfish 3, ecc.), È possibile utilizzare semplicemente Map#containsKey().

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

Se il vostro non, meglio che cosa si può fare è di creare una funzione di EL (altro esempio concreto di dichiarazione può essere trovato da qualche parte vicino fondo 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

Correggimi se sbaglio, ma il secondo approccio non sembra funzionare per me. Ho ottenuto gli stessi risultati dell'uso di '' – Mike

+0

Il primo approccio funziona correttamente. I miei cookie hanno un prefisso dell'applicazione su di essi quindi dovrei essere ok. – Mike

0

Se ho capito bene, si desidera rilevare che esso sia non esiste o è vuoto.

MODIFICA: ah. Per verificare che non esista, deve essere nullo e non vuoto.

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

Sto solo cercando di verificare che il cookie NON esista. – Mike

+1

Quando uso '$ {cookie.persist == null}' restituisce true se il cookie esiste AND è impostato su '' (stringa vuota) – Mike

0

utilizzare la mappa dei cookie per controllare esiste il cookie o no ${cookie["persist"] == null}

Spero che funzioni

+2

Sorry non ha funzionato. '$ {cookie [" persist "] == null}' ha dato lo stesso risultato di '$ {cookie.persist == null} ' – Mike

0

se si utilizza Tomcat 6+

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

Questa espressione non controlla se esiste un cookie, ma se esiste un valore del cookie. Il problema concreto dell'OP è che passerebbe anche quando il cookie esiste ma contiene un valore vuoto. Per favore rileggi la domanda e tutte le risposte. – BalusC