Отмена вызова JSF ajax - PullRequest
       1

Отмена вызова JSF ajax

4 голосов
/ 25 октября 2011

У меня есть тег f:ajax внутри тега h:inputText, который выполняет вызовы ajax для событий keyup:

<h:inputText id="searchinput" value="#{tvShowForm.name}">
  <f:ajax event="keyup" render="results" listener="#{tvShowForm.search}" />
</h:inputText>

Каждый вызов занимает достаточно времени, чтобы пользователь набрал несколько символов до завершения первого вызова.

Есть ли способ отменить текущий вызов ajax (и вызовы в очереди), чтобы последнее событие keyup немедленно выполнило вызов ajax?

1 Ответ

4 голосов
/ 29 октября 2011

Звучит так, как будто вы хотите объединить события, например, это подождет полсекунды, прежде чем запустить ajax-запрос, и любой ввод, введенный в этот момент, будет включен.Но вы не будете запускать ajax-запрос для каждого набранного символа.

    <h:inputText onkeyup="keyupHandler();"/>
    ...
    <script>
    var keystrokeTimeout;

    keyupHandler = function(event) {

        var minChars = 4;
        var len = $(this).val().length;
        if((len != 0) && (len < minChars)) {
            return;
        }

        var ajaxRequest = function() {
            jsf.ajax.request('results', null, {
                execute: 'results',
                render: 'results'
            });
        }
        clearTimeout(keystrokeTimeout);
        keystrokeTimeout = setTimeout(ajaxRequest, 500); // millisecs
    }
    </script>

Это удаленно как то, что вы хотите сделать?

РЕДАКТИРОВАТЬ: Другое предложение заключается в том, что вы проверяете Richfaces4 a4j: функциональность очереди.Это позволяет объединять события, например, в сценарии keyup, если вы опирались на клавиатуру, когда текущий ajax-запрос завершается, будет отправлен только один дополнительный запрос.Также возможно указать задержку запроса и игнорировать устаревшие ответы.Большая ошибка, которую не делает Richfaces (что делают основные лица), состоит в том, что RF использует ту же основную очередь, что и реализация JSF, поэтому у вас нет риска обработки не по порядку.

IИмейте в виду, что если вы еще не используете эту библиотеку, это не маленький шаг.

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