【发布时间】:2015-05-01 07:58:02
【问题描述】:
我有一个长期的工作必须在后台运行,完成后我想更新 jsf 视图组件。
我使用SimpleAsyncTaskExecutor 来完成这项工作。它工作得很好,但是当我开始更新 ui 时,我得到了NullPointerException。
这是我的代码
SimpleAsyncTaskExecutor tasks = new SimpleAsyncTaskExecutor();
tasks.submitListenable(new Callable<String>() {
@Override
public String call() throws Exception {
//Do long time taking job in approximately 16 seconds
doTheBigJob();
//then update view component by it's id
FacesContext.getCurrentInstance().getPartialViewContext().getRenderIds().add(myComponentId);
return "";
}
});
不:当时间很短(比如2秒)时,不会出现NullPointerException
提前致谢。
【问题讨论】:
-
这里没有春季知识,但我怀疑这是否会起作用。我知道如何从异步调用(ejb,而不是 spring)更新视图的唯一方法是使用基于 websockets 的推送机制,例如气氛(所以老客户的后备发生)
-
感谢您的建议,但 Dawit 的回答正是我想要的
-
:-) 如果我写了一个完整的答案,他写的正是我会写的,不同之处在于他建议轮询 (p:poll) 而我会建议 websockets (p:socket) .但是很好用
标签: spring jsf asynchronous