Multithreading 为什么使用线程时上下文为空?
我使用的是PrimeFaces3.2,在JSF中使用线程时遇到问题。我无法从该线程获取对当前Multithreading 为什么使用线程时上下文为空?,multithreading,jsf,Multithreading,Jsf,我使用的是PrimeFaces3.2,在JSF中使用线程时遇到问题。我无法从该线程获取对当前FacesContext的引用 如何获取该线程内该上下文的引用。当前的FacesContext存储在静态线程局部变量中。Servlet容器使用一个特定的线程来处理到达容器的每个请求/响应,因此,将FacesContext存储在线程局部变量中可以确保每个请求处理生命周期只有一个实例,这是应该的 当您试图从另一个线程获取对FacesContext的引用时,由于它存储为线程局部变量,并且您的新线程尚未初始化它,
FacesContext
的引用
如何获取该线程内该上下文的引用。当前的
FacesContext
存储在静态线程局部变量中。Servlet容器使用一个特定的线程来处理到达容器的每个请求/响应,因此,将FacesContext
存储在线程局部变量中可以确保每个请求处理生命周期只有一个实例,这是应该的
当您试图从另一个线程获取对FacesContext
的引用时,由于它存储为线程局部变量,并且您的新线程尚未初始化它,因此发生的情况是:您获得了null
引用
如果您想要/需要另一个新线程中的faces上下文,唯一可能的方法是通过
FacesContextFactory
创建一个新的上下文实例。但是,您需要引用一个HttpServletRequest
、一个HttpServletResponse
和一个ServletContext
来实例化它(我猜您将无法从单独的线程获得对这些对象的有效引用)。'FacesContext fc=FacesContext.getCurrentInstance();'我刚刚创建了runnable线程并尝试创建faces上下文对象。