Вы можете зарегистрировать его как обработчик обратного вызова 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 (щелкните ссылку для оценки ).Вот выдержка из релевантности:
ТАБЛИЦА 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-декларативным способом было бы просто встроить вызов сценария в компонент JSF с id
и позволить вызову ajax выполнить его повторную визуализацию.Компонент должен, в свою очередь, отображать сценарий условно на основе 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();" />
См.документация библиотеки компонентов, которую вы используете.
См. также: