【问题标题】:Couldn't access FacesContext.getCurrentInstance() from Self Spawned Thread无法从自生成线程访问 FacesContext.getCurrentInstance()
【发布时间】:2012-06-29 17:37:35
【问题描述】:

无法在自生成线程中获取“FacesContext.getCurrentInstance()”。

需要根据后端进程动态更新组件。通过创建线程来监控进程并与 p:poll 一起回调组件更新来实现相同的效果。

但是,新线程似乎无法使用“FacesContext.getCurrentInstance()”。只是在从新生成的线程调用任何依赖于 FacesContext.getCurrentInstance() 的实用程序方法时获取 NPE。

有没有办法让“FacesContext.getCurrentInstance()”在自生成线程中可用?

环境 JSF2.0、Prettyfaces-jsf2-3.3.2、Primafaces 3.2、Tomcat 6.0.32、JDK 5.0

谢谢你,

【问题讨论】:

    标签: multithreading jsf-2 primefaces


    【解决方案1】:

    FacesContext 是一个 ThreadLocal<T>,存储在执行当前 HTTP servlet 请求的线程中。您绝对不能在您自己生成的其他线程中访问它,这会破坏 JSF/Servlet 的整个工作。相反,您应该将可运行对象中的FacesContext 所需的那个 信息准确地传递给它的构造函数,可能只是具体的bean 实例本身,或者一些其他对象,这些对象又被引用为会话属性。

    顺便说一句,在 Java EE Web 应用程序中生成非托管线程是一种味道。确保您真正了解自己在做什么。另见Is it safe to start a new thread in a JSF managed bean?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-24
      • 2012-07-06
      • 2018-11-10
      • 1970-01-01
      相关资源
      最近更新 更多