关于Icefaces的Facelet模式中使用Cookies
分类:Web UI & Ajax, 服务器端技术, 计算机与互联网 作者: 秋天 时间: 21-10-2009
标签分类 : cookie, facelet, http, icefaces, jsf
传统的JSF中读取和写入Cookie的方式是这样子的:
// create cookies
HttpServletResponse httpServletResponse =
(HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse();
Cookie cookie = new Cookie("cookieKey", "cookieValue");
cookie.setMaxAge(365);
cookie.setComment("A Comment");
httpServletResponse.addCookie(cookie);
// get cookies
HttpServletRequest httpServletRequest =
(HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
Cookie[] cookies = httpServletRequest.getCookies();
if (cookies != null) {
for(int i=0; i<cookies.length; i++){
if (cookies[i].getName().equalsIgnoreCase("cookieKey")){
String cookieValue = cookies[i].getValue();
}
}
}
在Iceface 1.5以后的版本中,由于在整个生命周期中没有直接定义request和response类,以上方法不适用。
所以在Icefaces中使用cookies的方法如下:
((BridgeExternalContext) FacesContext.getCurrentInstance()
.getExternalContext()).addCookie(new Cookie("test", "test"));
将FacesContext的External instance强制转换成为Icefaces自己的BridgeExternalContext,然后再使用.addCookie方法就能正常的添加Cookie了,读取的时候也是一样的:
Cookies[] cookies = ((HttpServletRequest)((BridgeExternalContext)FacesContext
.getCurrentInstance().getExternalContext()).getRequest()).getCookies();
以上内容在Icefaces WIKI中有提到,我没有好好看WIKI,浪费了好几个小时在这里。