Отмена запроса Ajax в RichFaces - PullRequest
       3

Отмена запроса Ajax в RichFaces

4 голосов
/ 01 декабря 2011

У меня проблема с отменой Ajax-запроса. Наш интерфейс приложения построен в РФ.

На модале индикатора выполнения должна быть кнопка отмены - которая прерывает текущую операцию, например, отменить элементы управления заполнением из базы данных. Как это сделать?

Я пытался использовать страницу перезагрузки, флаги с условиями "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 голос
/ 04 января 2012

Перезагрузка страницы останавливает все текущие запросы AJAX. Это не мешает бинам бинам Java завершать запросы, но я предполагаю, что это не вопрос. c: if и ajax render не очень хорошо смешиваются. Возможно, вы могли бы использовать 'Rendered', чтобы отключить обновление элементов управления? Затем разделите элемент управления на две части. Один показан с действительными данными и, например, ярко-синим. Другой отображается без каких-либо данных и имеет серый рисунок.

Но ... я не уверен, что правильно понял вопрос.

Редактировать 23-1-2012: Видя код, я бы сказал, что cancelAction должен установить флаг, который затем завершает действие, выполняемое внутри actionShow (). Затем запрос ajax завершается, и всплывающее окно закрывается. Не могу понять, почему это не сработает.

...