Являются ли запросы AJAX JSF/Primefaces действительно асинхронными?

Я новичок в JSF, поэтому я не знаю, нормально ли я себя чувствую.

У меня есть этот код:

<p:selectBooleanCheckbox id="locationChoice1" value="#{login.locationChoice1}">
    <p:ajax listener="#{login.chooseLocationType1}" update="locationChoice1 locationChoice2 positionChoice" />
    <p:ajax listener="#{login.retrieveGalaxies}" update="test"  />
</p:selectBooleanCheckbox>

мой login.retrieveGalaxies функция имеет вызов sleep(8000) функция для имитации задержки. Я ожидаю, что мои компоненты locationChoice1, locationChoice2 а также positionChoice обновляться через 1 или 2 секунды и мой test компонент должен быть обновлен за 8 секунд, но все они обновляются за 8 секунд.

Это правильное поведение?

Я пытался играть с async параметр, но это не изменило результат.

1 ответ

Решение

Они действительно асинхронны (контекст JS не заблокирован; т. Е. Вы можете одновременно запустить другой произвольный код JS без блокировки). Поведение вы видите, потому что они стоят в очереди. Похоже, они не асинхронные.

Такое поведение в очереди указано в главе 13.3.2 спецификации JSF 2:

13.3.2. Очередь запросов Ajax

Все запросы Ajax должны быть помещены в очередь запросов на стороне клиента, прежде чем они будут отправлены на сервер, чтобы обеспечить обработку запросов Ajax в порядке их отправки. Запрос, который ожидал в очереди самый длинный, является следующим запросом, который будет отправлен. После отправки запроса функция обратного вызова Ajax-запроса должна удалить запрос из очереди (также известный как снятие очереди). Если запрос выполнен успешно, его необходимо удалить из очереди. Если произошла ошибка, клиент должен быть уведомлен, но запрос все равно должен быть удален из очереди, чтобы можно было отправить следующий запрос. Следующий запрос (самый старый запрос в очереди) должен быть отправлен. Обратитесь к jsf.ajax.request Документация JavaScript для получения дополнительной информации об очереди запросов Ajax.

Это делается для того, чтобы обеспечить целостность и потокобезопасность состояния представления JSF (и, таким образом, по сути, также просматривать объекты в области видимости).

Другие вопросы по тегам