我在托管bean中设置了request属性,然后通过faces-config重定向请求,如下所示:
FacesContext.getCurrentInstance().getExternalContext().getRequestMap().put("foo","bar");
return "redirect_success";
在此之后,我试图通过预先创建FacesContext
来访问我的过滤器中的此请求属性FacesContext.getCurrentInstance().getExternalContext().getRequestMap().get("foo");
最后无法在过滤器本身中获取此属性,但我能够非常轻松地在第二个托管bean中再次获得相同的属性。 有什么方法可以在过滤器中使用它吗?
答案 0 :(得分:4)
两种方式:
存储在会话中,如果需要,让过滤器将其从会话中删除。
externalContext.getSessionMap().put("foo", "bar");
顺便说一句,没有必要在FacesContext
中自己创建Filter
。只需将ServletRequest
投射到HttpServletRequest
。
HttpSession session = ((HttpServletRequest) request).getSession();
String foo = (String) session.getAttribute("foo");
session.removeAttribute("foo");
使用ExternalContext#redirect()
将其添加为请求参数。
externalContext.redirect("other.jsf?foo=bar");
然后在Filter
:
String foo = ((HttpServletRequest) request).getParameter("foo");