我一直在努力解决这个问题,现在的情况是:我有一个方法执行一个非常长的操作,需要几分钟才能执行,这个方法是由commandButton触发的,所以当用户点击它我想开始(实时)向他展示一些关于应用程序正在做什么的信息。
这是我到目前为止所做的:
managedBean:
@ManagedBean
@ViewScoped
public class Mbean implements Serializable {
public String message;
public void startLongProcess(ActionEvent ev) {
step1();
message = "step 1 finished!";
RequestContext.getCurrentInstance().update("msg");
step2();
message = "step 2 finished!";
RequestContext.getCurrentInstance().update("msg");
step3();
message = "step 3 finished!";
RequestContext.getCurrentInstance().update("msg");
}
...
}
XHTML:
<p:commandButton actionListener="#{mbean.startLongProcess}" ajax="true" />
<h:panelGroup id="msg">
<h:outputText value="#{mbean.message}" />
</h:panelGroup>
在此示例中,我执行了3步操作,在完成每个步骤后显示不同的消息,问题是在方法执行期间消息未在视图上更新,更新仅发生在整个过程结束了。
有谁知道如何让它实时更新?