2011-12-01 84 views
4

我有取消Ajax請求的問題。我們的應用程序界面內置RF。取消RichFaces中的Ajax請求

在進度條模式中,應該有取消按鈕 - 例如,中斷當前操作,例如 取消數據庫的填充控制。如何做到這一點?

我嘗試使用重新加載頁面,帶有「if」條件的getters控件的標誌以及使用「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

重新加載頁面停止所有當前的Ajax請求。它不會阻止Java支持bean完成請求,但我認爲這不是問題。 c:如果和ajax渲染混合不好。可能你可以使用'rendered'來禁止更新控件?然後將控制分爲兩部分。一個顯示有效數據,例如明亮的藍色。另一個呈現沒有任何數據,並有一個灰色的圖片。

但是......我不確定我是否正確地理解了這個問題。

編輯23-1-2012:看到代碼我會說,cancelAction必須設置一個標誌,然後完成在actionShow()內部運行的動作。然後ajax請求結束,彈出窗口關閉。看不出爲什麼這不起作用。

+0

進入細節,我需要停止java backing bean完成請求。 – Marcin

+0

支持bean ...可以在啓動批處理時將變量設置爲true,並且應該在取消作業後立即將其設置爲false?您的支持bean然後可以使用該變量來決定是否繼續。 –

+0

我試過了,它不起作用 – Marcin