取消RichFaces中的Ajax请求

4

我有一个取消Ajax请求的问题。我们的应用程序界面是使用RF构建的。

进度条模态框上应该有一个取消按钮 - 它会中断当前操作,例如取消从数据库填充控件。如何做到这一点?

我尝试过重新加载页面,在获取控件的“if”条件标志上使用和使用“bypassUpdates”,但都没有产生积极的效果。

感谢您提前的帮助

XHTML(按钮):

<a4j:commandButton id="showData"
          value="View" styleClass="hBtn"
          disabled="#{events.isButtonsDisabled}"
          oncomplete="if (#{facesContext.maximumSeverity==null}) 
                {window.open('/seed/pages/data.jsf','DATA')};"
          actionListener="#{events.actionShow}"/>

JAVA:(按钮):

public void actionShow(ActionEvent evt) {
    //Some logic, getting data from database

}

XHTML(主页 - 显示等待弹窗)

<a4j:form>
    <a4j:status id="ajaxStat"
        onstart="Richfaces.showModalPanel('waitPanel');"
        onstop="#{rich:component('waitPanel')}.hide()" />
</a4j:form>

XHTML(弹出窗口):
<rich:modalPanel id="waitPanel" autosized="true" moveable="false"
         minWidth="250" styleClass="popup">
    <f:facet name="header">
    <h:panelGroup>
        <h:outputText value="Operation in progress"></h:outputText>
    </h:panelGroup>
    </f:facet>
    <f:facet name="controls">
    <h:panelGroup>
        <h:graphicImage value="../images/icons/action_close.gif" styleClass="hidelink" id="hidelink"/>
        <rich:componentControl for="waitPanel" attachTo="hidelink" operation="hide" event="onclick"/>
    </h:panelGroup>
    </f:facet>
    <a4j:form id="msgFrm" ajaxSubmit="true">
    <h:outputText value="Please wait..."/>
    <h:graphicImage styleClass="progressBar" value="../images/indicatorbar.gif"/>
        <a4j:commandButton value="Cancel" type="button"
                   onclick="#{rich:component('waitPanel')}.hide()"
                   action="#{main.cancelAction}"
                   bypassUpdates="true"/>
    </a4j:form>
</rich:modalPanel>   

JAVA(弹窗):

public void cancelAction(){
//there was setter for true/false flag for actionShow() here, now there is nothing here (it was not working)
}
1个回答

1
重新加载页面会停止所有当前的ajax请求。它不会停止Java后端bean完成请求,但我认为这不是问题所在。 c:if和ajax render不太搭配。可能你可以使用“rendered”来禁用更新控件?然后将控件分成两部分。一个显示有效数据,例如亮蓝色。另一个没有任何数据并且有一个灰色图片。 但是...我不确定我正确理解了问题。 编辑23-1-2012:看到代码后,我会说cancelAction必须设置一个标志,然后完成在actionShow()内运行的操作。然后ajax请求完成并关闭弹出窗口。看不出为什么这不起作用。

深入细节,我需要阻止Java后端Bean完成请求。 - Marcin
后端 Bean...当启动批处理时,您可以将变量设置为 true,然后在作业应该被取消时将其设置为 false。然后,您的后端 Bean 可以使用该变量来决定是否继续执行。 - Milo van der Zee
你能展示一些代码吗?你的变量是易失性的吗?我有一些可以被取消的批处理作业,所以必须要有这个功能 :) - Milo van der Zee
变量使用volatile后是私有的,使用公共getter和setter方法。附加代码如下。 - Marcin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接