gpt4 book ai didi

jsf - 如何在过滤器中检索 FacesContext

转载 作者:行者123 更新时间:2023-12-04 00:39:03 25 4
gpt4 key购买 nike

如何在过滤器中检索 FacesContext?

我遵循以下关于如何检索 FacesContext 的文章在 Filter :

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)

我想在我的过滤器中添加重定向并使用 flash 作用域来保存一些数据和消息,这不起作用。

最佳答案

How do I retrieve the FacesContext within a Filter?



你不能。 FacesContextFacesServlet 创建因此仅在由 FacesServlet 处理的任何 Java 代码中可用,它涵盖了所有 JSF 工件,例如托管 bean 和阶段监听器。文章只展示了如何手动创建 FacesContext ,但这种方法最终是无用的。 FacesContext只是标准 Servlet API 已经可用的所有内容的抽象,例如 HttpServletRequest , HttpSession , ServletContext等。直接使用它们就像 JSF 在“幕后”所做的那样。

您有 2 个选择:
  • 使用 JSF PhaseListener反而。根据您没有提及的具体功能要求,这可能是一个相当笨拙的解决方案/解决方法。
  • 不要使用 JSF 提供的 Flash 作用域工具,而是自己自制一个。原理很简单:在初始请求上设置一个cookie,发送一个重定向,在重定向的请求中查找cookie 删除它(以便它在任何后续请求中不再存在)。这正是 JSF Flash 作用域在幕后工作的方式。另见 Set notification message as request attribute which should show after sendRedirect举个具体的例子。
  • 关于jsf - 如何在过滤器中检索 FacesContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14045242/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com