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.