您可以通过以下方式获取所有cookieExternalContext#getRequestCookieMap() http://download.oracle.com/javaee/6/api/javax/faces/context/ExternalContext.html#getRequestCookieMap%28%29
Map<String, Object> cookies = externalContext.getRequestCookieMap();
// ...
当在 Servlet API 之上运行 JSF 时(99.9% 的情况都是如此;)),映射值解析为javax.servlet.http.Cookie http://download.oracle.com/javaee/6/api/javax/servlet/http/Cookie.html.
Cookie cookie = (Cookie) cookies.get(name);
// ...
在 JSF 1.2 中,缺少 JSF 2.0 引入的ExternalContext#addResponseCookie() http://download.oracle.com/javaee/6/api/javax/faces/context/ExternalContext.html#addResponseCookie%28java.lang.String,%20java.lang.String,%20java.util.Map%29方法,你需要投射ExternalContext#getResponse() http://download.oracle.com/javaee/6/api/javax/faces/context/ExternalContext.html#getResponse%28%29 to HttpServletResponse http://download.oracle.com/javaee/6/api/javax/servlet/http/HttpServletResponse.html(当然,仅当在 Servlet API 之上运行 JSF 时)然后使用HttpServletResponse#addCookie() http://download.oracle.com/javaee/6/api/javax/servlet/http/HttpServletResponse.html#addCookie%28javax.servlet.http.Cookie%29.
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);
您可以在 JSF 上下文中的任何位置执行此操作,正确的位置取决于唯一的功能需求。您只需确保在响应已提交时不添加 cookie,否则会导致IllegalStateException http://download.oracle.com/javase/6/docs/api/java/lang/IllegalStateException.html.