Отмена запроса JSF Ajax от jsf.ajax.addOnEvent () - PullRequest
4 голосов
/ 19 января 2012

Я хотел бы иметь центральное место, где я отслеживаю запросы ajax и в определенных ситуациях прерываю их.

Единственное, чего я не знаю, это фактически отменить запрос ajax из одной центральной функции.

Я представляю, что решение будет выглядеть примерно так:

jsf.ajax.addOnEvent(function(data) { 
    if (data.status === 'begin') {
        // abort the ajax request
    }
});

Но я могу ошибаться.

Спасибо!

Ответы [ 3 ]

3 голосов
/ 19 января 2012

Это невозможно по стандарту JSF JS API .Лучше всего добавить обработчик onclick или onchange в вызывающий компонент JSF, который возвращает false, если выполняется необходимое условие для отмены запроса ajax.

<h:commandButton onclick="return mayFireAjax(this)">
    <f:ajax />
</h:commandButton>

При необходимости вы можетеабстрагируйте это с помощью jQuery.on() (или jQuery.delegate() или jQuery.live() в зависимости от используемой версии jQuery) на общем селекторе, чтобы вы неТ нужно повторить для каждого необходимого компонента.

$(someSelector).on("click", function() {
    return mayFireAjax(this);
});
1 голос
/ 27 июня 2013

Если у вас есть контроль над источником, вы всегда можете прикрепить onClick к компоненту UICommand. Но в некоторых ситуациях у вас нет доступа к источнику. Например, ajax предоставляется сторонним компонентом. Вы не хотите связываться с их компонентами.

Во-первых, у меня есть небольшая библиотека js.

var FxJSFBegin = "JSFBegin";

if (jsf) {

    var originalRequest = jsf.ajax.request;

    jsf.ajax.request = function(source, oevent, options) {

        var event = $.Event(FxJSFBegin);

        event.options = options;

        event.originalEvent = oevent;

        $(source).trigger(event);

        if (event.isDefaultPrevented()) {

            return;

        } else {

            originalRequest.apply(null, arguments);

        }

    };

}

Этот фрагмент кода проксирует исходный AJAX-вызов JSF. Он использует jQuery для запуска события "JSFBegin". Интеграционный код может прослушивать это событие, используя механизм jQuery. Слушатель может отменить вызов jsf, используя event.preventDefault ().

Требования:

  1. JQuery
  2. Этот фрагмент кода должен быть помещен после загрузки jsf.js.
0 голосов
/ 01 марта 2016

Использование global = "false" поможет вам предотвратить вызов статуса ajax для вызова ajax. Пожалуйста, обратитесь к следующей ссылке.

Различные состояния Ajax для разных компонентов в PrimeFaces

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...