Ответ 1
Вы можете зарегистрировать его как обработчик обратного вызова ajax JSF jsf.ajax.addOnEvent
:
<script>
jsf.ajax.addOnEvent(foo);
</script>
с
<script>
function foo(data) {
var ajaxStatus = data.status; // Can be "begin", "complete" and "success".
switch (ajaxStatus) {
case "begin": // Right before sending ajax request.
// ...
break;
case "complete": // Right after receiving ajax response.
// ...
break;
case "success": // When ajax response is successfully processed.
// ...
break;
}
}
</script>
где объект data
имеет несколько полезных свойств XHR, которые описаны в таблице 14-4 спецификации JSF 2.0 (нажмите кнопку For Оценка). Здесь выдержка релевантности:
ТАБЛИЦА 14-4 Информационная информация о событиях
Name Description/Value ------------- ---------------------------------------------------- type "event" status One of the events specified in TABLE 14-3 source The DOM element that triggered the Ajax request. responseCode Ajax request object ‘status’ (XMLHttpRequest.status); Not present for "begin" event; responseXML The XML response (XMLHttpRequest.responseXML); Not present for "begin" event; responseText The text response (XMLHttpResponse.responseTxt); Not present for "begin" event;
В качестве альтернативы, XHTML-декларативный способ состоял бы в том, чтобы просто вставить вызов script в компонент JSF с помощью id
и позволить аякс-вызову повторно отобразить его. Компонент должен, в свою очередь, визуализировать script на основе FacesContext#isPostback()
.
<h:form>
<h:commandButton value="Submit" action="#{bean.submit}">
<f:ajax render=":myscript">
</h:commandButton>
</h:form>
<h:panelGroup id="myscript">
<h:outputScript rendered="#{facesContext.postback}">foo();</h:outputScript>
</h:panelGroup>
Большинство библиотек компонентов, однако, лучше абстрагировали поддержку для этого. Поскольку вы не указали, какой из них вы используете, чтобы дать более подходящий ответ, вот только случайный пример, основанный на PrimeFaces.
<p:commandButton value="Submit" action="#{bean.submit}" oncomplete="foo();" />
Обратитесь к документации библиотеки компонентов, которую вы используете.