我希望能够停止执行使用commandButton启动的漫长任务:
<p:commandButton id="startBatch"value="Go" actionListener="#{batchController.sendBatch()}"ajax="true" />
所以在我的模型中我添加了一个布尔“abort”并在sendBatch()中添加了一个检查,以便在布尔值变为true时停止循环:
for (int i = 1; i <= batch.size(); i++) {
if (batchModel.isAbort()) {
break;
}
}
在我的XHTML中,我添加了一个新按钮,该按钮调用一个将此布尔值设置为true的方法:
<p:commandButton id="abortBatchButton"
value="Abort"
actionListener="#{batchController.abort()}"
ajax="true"/>
问题是在完成sendBatch()方法后会调用 abort()。
有没有一种简单的方法来实现它?
答案 0 :(得分:2)
默认情况下p:commandButton
使用Ajax。但是,默认情况下,多个操作(请求)会排队并同步执行。因此,如果您已经开始了漫长的操作,则在前一个操作完成时将处理下一个操作。
如果您不想对操作进行排队,则应在相应的按钮上使用async="true"
。
在你的情况下:
<p:commandButton id="startBatch"
value="Go"
async="true"
actionListener="#{batchController.sendBatch()}" />
我已删除ajax="true"
,因为它是默认设置。