Как я могу показать некоторое загрузочное сообщение при выполнении запроса с помощью <f:ajax>
?
Показывать ход загрузки при выполнении запроса JSF Ajax
Ответ 1
Если вы еще не используете стороннюю библиотеку компонентов, у которой уже есть готовый компонент для этого, например PrimeFaces с <p:ajaxStatus>
, вы можете использовать JSF-предоставленный JavaScript jsf.ajax.addOnEvent()
(и в конечном итоге также jsf.ajax.addOnError()
), чтобы подключить функцию к событиям ajax.
Вот пример основного запуска:
<script>
jsf.ajax.addOnEvent(function(data) {
var ajaxstatus = data.status; // Can be "begin", "complete" and "success"
var ajaxloader = document.getElementById("ajaxloader");
switch (ajaxstatus) {
case "begin": // This is called right before ajax request is been sent.
ajaxloader.style.display = 'block';
break;
case "complete": // This is called right after ajax response is received.
ajaxloader.style.display = 'none';
break;
case "success": // This is called when ajax response is successfully processed.
// NOOP.
break;
}
});
</script>
<img id="ajaxloader" src="ajaxloader.gif" style="display: none;" />
См. также главу 13.3.5.2 спецификации JSF 2.0:
13.3.5.2 Мониторинг событий для всех запросов Ajax
API JavaScript предоставляет функцию
jsf.ajax.addOnEvent
, которая может использоваться для регистрации функции JavaScript который будет уведомлен о возникновении любого события Ajax-запроса/ответа. См. Раздел 14.4 "Регистрация обратного вызова" Функции "для более подробной информации. Функцияjsf.ajax.addOnEvent
принимает аргумент функции JavaScript, который будет уведомляется, когда события происходят во время любого цикла событий запроса/ответа Ajax. Реализация должна убедитесь, что зарегистрированная функция JavaScript должна быть вызвана в соответствии с событиями, указанными в Раздел ТАБЛИЦА 14-3" События".
Вы можете, кстати, захватить несколько классных гигабайтов gjs ajax бесплатно http://www.ajaxload.info.
Ответ 2
richfaces имеет очень простой в использовании компонент, который я использую следующим образом:
<a4j:status startText="" stopText="" onstart="showAjaxActive();" onstop="hideAjaxActive();"/>