如何在JSF中使用cookie

Ben*_*Ben 20 cookies session jsf

我在JSF 1.2 Session Scope Bean上有一个JSF表单.我有一个"重置"按钮,会话无效.

我尝试使用cookie来记住会话之间的会话号(不是JSF会话,但我的私人会话号),但我失败了.我的问题 - 初始化,检索和存储cookie的正确位置(某些监听器?Bean构造函数?)在哪里?

寻找最好的方法来做到这一点.

谢谢!

Bal*_*usC 34

您可以通过获取所有cookie ExternalContext#getRequestCookieMap()

Map<String, Object> cookies = externalContext.getRequestCookieMap();
// ...
Run Code Online (Sandbox Code Playgroud)

在Servlet API之上运行JSF时(在99.9%的情况下都是如此;)),映射值解析为javax.servlet.http.Cookie.

Cookie cookie = (Cookie) cookies.get(name);
// ...
Run Code Online (Sandbox Code Playgroud)

在JSF 1.2中,缺少JSF 2.0引入的ExternalContext#addResponseCookie()方法,你需要转换ExternalContext#getResponse()HttpServletResponse(当然只在Servlet API上运行JSF时),然后使用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);
Run Code Online (Sandbox Code Playgroud)

您可以在所需的JSF上下文中的任何位置执行此操作,正确的位置取决于唯一的功能要求.您只需要确保在已经提交响应时不添加cookie,否则会导致响应IllegalStateException.