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
.
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
Cliquez sur le lien 'addResponseCookie()' dans ma réponse. Il pointe vers le javadoc. – BalusC
@BalusC, dois-je obtenir tous les cookies pour obtenir un cookie spécifique, je ne peux pas obtenir un cookie spécifique directement? –