2011-04-05 2 views
19

J'ai un formulaire JSF sur un bean de portée de session JSF 1.2. J'ai un bouton "Reset" qui invalide la session.Comment utiliser les cookies dans JSF

J'ai essayé d'utiliser des cookies pour mémoriser un numéro de session (pas une session JSF mais mon numéro de session privée) entre les sessions mais j'ai échoué. Ma question - Où est le bon endroit (Un auditeur? Bean Constructor?) Pour initialiser, récupérer et stocker le cookie.

Vous cherchez la meilleure méthode pour cela.

Merci!

Répondre

34

Vous pouvez obtenir tous les cookies par ExternalContext#getRequestCookieMap()

Map<String, Object> cookies = externalContext.getRequestCookieMap(); 
// ... 

Lors de l'exécution JSF sur le dessus de l'API Servlet (ce qui est vrai dans 99,9% des cas;)), la valeur de la carte décide de javax.servlet.http.Cookie.

Cookie cookie = (Cookie) cookies.get(name); 
// ... 

Dans JSF 1.2, qui n'a pas la méthode JSF 2.0 introduit ExternalContext#addResponseCookie(), vous devez lancer le ExternalContext#getResponse()-HttpServletResponse (uniquement lors de l'exécution JSF sur le dessus de l'API Servlet bien sûr), puis utilisez le HttpServletResponse#addCookie().

HttpServletResponse response = (HttpServletResponse) externalContext.getResponse(); 
Cookie cookie = new Cookie(name, value); 
cookie.setMaxAge(maxAge); // Expire time. -1 = by end of current session, 0 = immediately expire it, otherwise just the lifetime in seconds. 
response.addCookie(cookie); 

Vous pouvez le faire partout dans le contexte JSF que vous voulez, au bon endroit dépend de la seule exigence fonctionnelle. Vous avez seulement besoin de vous assurer que vous n'ajoutez pas le cookie lorsque la réponse a déjà été validée, sinon vous obtiendrez un IllegalStateException.

+0

La méthode 'addResponseCookie()' accepte les paramètres 'nom de chaîne, valeur de chaîne, carte propriétés'. Je suppose que par exemple _maxAge_ de 'javax.servlet.http.Cookie' sont encodés dans les propriétés. Existe-t-il un moyen d'utiliser un cookie directement? – Thor

+0

Cliquez sur le lien 'addResponseCookie()' dans ma réponse. Il pointe vers le javadoc. – BalusC

+0

@BalusC, dois-je obtenir tous les cookies pour obtenir un cookie spécifique, je ne peux pas obtenir un cookie spécifique directement? –

Questions connexes