我在JSF 1.2会话作用域Bean上有一个JSF表单。 我有一个“重置”按钮,使会话无效。如何在JSF中使用cookie
我试图使用cookie来记忆会话之间的会话编号(非JSF会话,但我的私人会话编号),但我失败了。 我的问题 - 正确的地方(一些监听器?Bean构造器?)初始化,检索并存储cookie。
寻找最好的方法来做到这一点。
谢谢!
我在JSF 1.2会话作用域Bean上有一个JSF表单。 我有一个“重置”按钮,使会话无效。如何在JSF中使用cookie
我试图使用cookie来记忆会话之间的会话编号(非JSF会话,但我的私人会话编号),但我失败了。 我的问题 - 正确的地方(一些监听器?Bean构造器?)初始化,检索并存储cookie。
寻找最好的方法来做到这一点。
谢谢!
可以通过ExternalContext#getRequestCookieMap()
Map<String, Object> cookies = externalContext.getRequestCookieMap();
// ...
获得所有cookie当运行上的Servlet API之上JSF(这是在病例99.9%的真;)),地图值解析到javax.servlet.http.Cookie
。
Cookie cookie = (Cookie) cookies.get(name);
// ...
在JSF 1.2,它缺乏JSF 2.0引入ExternalContext#addResponseCookie()
方法,需要投(上当然Servlet API的顶部,只有当运行JSF)的ExternalContext#getResponse()
到HttpServletResponse
,然后使用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);
你可以做你想要的JSF此背景下的任何地方,正确的地方依赖于单一功能需求。您只需确保在响应已被提交时不添加cookie,否则将导致IllegalStateException
。
'addResponseCookie()'方法接受参数'String name,String value,Map properties'。我假设例如'javax.servlet.http.Cookie'的_maxAge_在属性中编码。有没有办法直接使用'Cookie'? –
Thor
2012-08-04 14:27:46
点击我答案中的'addResponseCookie()'链接。它指向了javadoc。 – BalusC 2012-08-04 14:36:42
@BalusC,我必须得到所有的cookie才能得到一个特定的cookie,我不能直接得到一个特定的cookie吗? – 2012-11-07 08:28:05