使用线程时为什么上下文为null?

时间:2012-09-04 12:49:31

标签: multithreading jsf

我正在使用primefaces 3.2,我在JSF中使用线程时遇到问题。我无法从该线程获得对当前FacesContext的引用。

如何在该线程内获取对该上下文的引用。

1 个答案:

答案 0 :(得分:1)

当前FacesContext存储在静态线程局部变量中。 Servlet容器使用特定的线程来处理到达容器的每个请求/响应,因此将FacesContext存储在线程局部变量中可确保每个请求处理生命周期只有一个实例,这应该是它应该如何

当您尝试从另一个线程获取对FacesContext的引用时,会发生什么,因为它存储为线程局部变量,并且由于您的新线程尚未初始化它:您获得了{ {1}}参考。

如果你想要/需要另一个新线程中的faces上下文,唯一可行的方法是通过null创建一个新的上下文实例。但是,您需要引用FacesContextFactoryHttpServletRequestHttpServletResponse来实例化它(我猜您将无法从单独的对象获取对这些对象的有效引用线程)。