通过预先创建FacesContext,在Filter中访问请求属性(在重定向之前在托管bean中设置)

时间:2011-02-04 07:01:13

标签: jsf

我在托管bean中设置了request属性,然后通过faces-config重定向请求,如下所示:

FacesContext.getCurrentInstance().getExternalContext().getRequestMap().put("foo","bar");

return "redirect_success";

在此之后,我试图通过预先创建FacesContext

来访问我的过滤器中的此请求属性
FacesContext.getCurrentInstance().getExternalContext().getRequestMap().get("foo");

最后无法在过滤器本身中获取此属性,但我能够非常轻松地在第二个托管bean中再次获得相同的属性。 有什么方法可以在过滤器中使用它吗?

1 个答案:

答案 0 :(得分:4)

两种方式:

  1. 存储在会话中,如果需要,让过滤器将其从会话中删除。

    externalContext.getSessionMap().put("foo", "bar");
    

    顺便说一句,没有必要在FacesContext中自己创建Filter。只需将ServletRequest投射到HttpServletRequest

    HttpSession session = ((HttpServletRequest) request).getSession();
    String foo = (String) session.getAttribute("foo");
    session.removeAttribute("foo");
    
  2. 使用ExternalContext#redirect()将其添加为请求参数。

    externalContext.redirect("other.jsf?foo=bar");
    

    然后在Filter

    String foo = ((HttpServletRequest) request).getParameter("foo");