最简单的方法就是将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() 添加一个全局挂钩,这样如果功能要求适用于每个ajax 请求,您就不需要在<f:ajax> 的每个onevent 属性中指定它。
jsf.ajax.addOnEvent(handleAjax);
另一种方法是使用OmniFaces JSF utility library,它提供<h:onloadScript> 正是为此目的。你可以把它放在你想要的头上。
<h:onloadScript>someFunction();</h:onloadScript>
这会在视图上的每个 ajax 请求上自动重新执行,因此您无需将其复制到视图中可以进行 ajax 更新的多个单独位置,或者在每个 @ 中重复其父 ID 987654334@.