无法在自生成线程中获取“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
谢谢你,
The FacesContext http://docs.oracle.com/javaee/6/api/javax/faces/context/FacesContext.html是作为一个ThreadLocal<T> http://docs.oracle.com/javase/7/docs/api/java/lang/ThreadLocal.html存储在执行当前 HTTP servlet 请求的线程中。您绝对无法在您自己生成的其他线程中访问它,这会破坏 JSF/Servlet 的整个工作。你应该准确地传递that您需要的信息FacesContext
在可运行对象的构造函数中,可能只是具体的 bean 实例本身,或者其他一些对象,这些对象反过来也被作为会话属性引用。
顺便说一句,在 Java EE Web 应用程序中生成非托管线程是一种味道。确保您真正了解自己在做什么。也可以看看在 JSF 托管 bean 中启动新线程是否安全? https://stackoverflow.com/questions/6149919/is-it-safe-to-start-a-new-thread-in-a-jsf-managed-bean/6151574#6151574
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)