4

无法在自生成线程中获取“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

谢谢你,

4

1 回答 1

5

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

顺便说一句,在 Java EE Web 应用程序中生成非托管线程是一种味道。确保您真正了解自己在做什么。另请参阅在 JSF 托管 bean 中启动新线程是否安全?

于 2012-06-29T17:51:52.863 回答