jsf – 如何检索过滤器中的FacesContext

如何在过滤器中检索FacesContext?

我按照以下文章介绍如何在过滤器中检索FacesContext:

http://ocpsoft.org/java/jsf-java/jsf-20-extension-development-accessing-facescontext-in-a-filter/

但是问题是它不适用于Flash范围. NPE抛出后:

java.lang.NullPointerException
at com.sun.faces.context.flash.ELFlash.loggingGetPhaseMapForWriting(ELFlash.java:751)
at com.sun.faces.context.flash.ELFlash.getPhaseMapForWriting(ELFlash.java:785)
at com.sun.faces.context.flash.ELFlash.put(ELFlash.java:392)
at com.sun.faces.context.flash.ELFlash.put(ELFlash.java:112)

我想在我的过滤器中添加重定向,并使用闪光灯范围来保存一些数据以及消息,这是不起作用的.

How do I retrieve the FacesContext within a Filter?

你不能. FacesContext由FacesServlet创建,因此仅在由FacesServlet处理的任何Java代码中可用,涵盖所有JSF工件(如托管bean和阶段监听器).该文章仅显示如何手动创建FacesContext,但这种方法最终没有用. FacesContext只是一些标准Servlet API可用的抽象方法,例如HttpServletRequest,HttpSession,ServletContext等.只需使用它们与JSF正在执行“引擎盖”下的方式相同.

你有两个选择:

>改用JSF PhaseListener.根据具体的功能要求,您没有告诉任何事情,这可能是一个相当笨拙的解决方案/解决方法.
>不要使用JSF提供的Flash范围设施,而是自己一个人自己.原理很简单:在初始请求时设置cookie,发送重定向,在重定向请求中查找cookie并将其删除(以便在任何后续请求中不再存在).这正是JSF Flash范围在引擎盖下的作用.另见Set notification message as request attribute which should show after sendRedirect具体示例.

翻译自:https://stackoverflow.com/questions/14045242/how-do-i-retrieve-the-facescontext-within-a-filter

转载注明原文:jsf – 如何检索过滤器中的FacesContext