从commandButton actionListener中止长ajax调用?

时间:2016-10-19 11:35:30

标签: ajax primefaces

我希望能够停止执行使用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()。

有没有一种简单的方法来实现它?

1 个答案:

答案 0 :(得分:2)

默认情况下p:commandButton使用Ajax。但是,默认情况下,多个操作(请求)会排队并同步执行。因此,如果您已经开始了漫长的操作,则在前一个操作完成时将处理下一个操作。

如果您不想对操作进行排队,则应在相应的按钮上使用async="true"

在你的情况下:

<p:commandButton id="startBatch"
                 value="Go"
                 async="true"
                 actionListener="#{batchController.sendBatch()}" />

我已删除ajax="true",因为它是默认设置。