JSF以定时间隔从应用程序bean轮询数据库

时间:2011-04-27 21:33:12

标签: java database jsf

嘿所有,我对jsf很新,所以如果这是一个很糟糕的问题,那么我道歉。我目前正在开展一个学校项目,我需要通过Web服务访问数据库以获取一些基本的应用程序数据。我有一个类通过方法访问此数据,然后从数据库返回最新的结果。

我想要做的是生成一个调用数据库更新方法的线程。 run方法看起来与此类似,我得到了我的应用程序bean,然后在其上调用了refresh方法。

theFacesContext = FacesContext.getCurrentInstance();
ApplicationBean app = (ApplicationBean)theFacesContext.getELContext().getELResolver().getValue(theFacesContext.getELContext(), null, applicationbean);
app.getDBValues();

然后,线程将根据在销毁应用程序bean时设置为false的变量进行循环。我的错误是线程丢失了facescontext。我已经看过一些帖子,人们会说出你必须在请求中保留线程的内容,但我不确定这意味着什么。任何建议都会非常有用。

2 个答案:

答案 0 :(得分:1)

如果要显示实际数据,则应使用轮询或服务器端推送。有很多可能有帮助的ajax组件。看看 PrimeFaces poll component
RichFaces push
RichFaces poll
ICEfaces

答案 1 :(得分:0)

确实FacesContext在新线程中不可用。这是因为它存储在ThreadLocal中,并根据请求启动。

您可以获取所需的bean并将其传递给新线程,以便您不再依赖于那里的faces上下文。