Самый простой способ — просто поместить вызов функции JS в сам обновляемый компонент.
<h:form>
...
<h:commandButton value="submit"><f:ajax render="@form" /></h:commandButton>
<h:outputScript>someFunction();</h:outputScript>
</h:form>
Таким образом, он выполняется при загрузке страницы, а также при обновлении формы с помощью ajax.
Что касается самого <f:ajax>
, вы также можете использовать его атрибут onevent
.
<f:ajax ... onevent="handleAjax" />
с участием
function handleAjax(data) {
var status = data.status;
switch(status) {
case "begin":
// This is invoked right before ajax request is sent.
break;
case "complete":
// This is invoked right after ajax response is returned.
break;
case "success":
// This is invoked right after successful processing of ajax response and update of HTML DOM.
someFunction();
break;
}
}
Вы можете добавить глобальный хук с помощью jsf.ajax.addOnEvent()
, чтобы вам не нужно было указывать его в каждом отдельном атрибуте onevent
<f:ajax>
, если функциональное требование применяется к каждому запросу ajax.
jsf.ajax.addOnEvent(handleAjax);
В качестве альтернативы можно использовать библиотеку утилит OmniFaces JSF, которая предлагает <h:onloadScript>
именно для этой цели. Вы можете разместить его в голове так, как хотите.
<h:onloadScript>someFunction();</h:onloadScript>
Это автоматически повторно выполняется для каждого отдельного запроса ajax в представлении, поэтому вам не нужно копировать его в несколько отдельных мест в представлении, которое может быть обновлено с помощью ajax, или повторять его родительский идентификатор в каждом <f:ajax render>
.
person
BalusC
schedule
26.10.2012