关于Icefaces的Facelet模式中使用Cookies

分类:Web UI & Ajax, 服务器端技术, 计算机与互联网 作者: 秋天 时间: 21-10-2009

标签分类 : , , , ,

传统的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,浪费了好几个小时在这里。

Leave a Reply


如果你也有Blog,欢迎申请链接加入我的朋友圈