A.G*_*.G. 17 javascript jsf rerender
我需要在表单重新渲染后重新执行javascript.简单地说,在XHTML内容之后放入javascript将无法帮助,因为它是部分请求.另外,我不能使用"onComplete"作为我重新渲染表单的commandButton是在几个地方使用的JSF组件.我需要在本地修复.
有什么办法吗?我想知道f:ajax在这种情况下是否会有所帮助.
如果有人对此有任何疑问,请告诉我.
Bal*_*usC 38
最简单的方法是将JS函数调用放入要更新的组件本身.
<h:form>
...
<h:commandButton value="submit"><f:ajax render="@form" /></h:commandButton>
<h:outputScript>someFunction();</h:outputScript>
</h:form>
Run Code Online (Sandbox Code Playgroud)
这种方式在页面加载时执行,如果表单由ajax更新.
至于<f:ajax>
它本身,你也可以使用它的onevent
属性.
<f:ajax ... onevent="handleAjax" />
Run Code Online (Sandbox Code Playgroud)
同
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;
}
}
Run Code Online (Sandbox Code Playgroud)
您可以添加一个全局钩子,jsf.ajax.addOnEvent()
这样如果功能要求适用于每个ajax请求onevent
,<f:ajax>
则不需要在每个属性中指定它.
jsf.ajax.addOnEvent(handleAjax);
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用OmniFaces JSF实用程序库,它<h:onloadScript>
实现了这个目的.您可以根据需要将其放在头部.
<h:onloadScript>someFunction();</h:onloadScript>
Run Code Online (Sandbox Code Playgroud)
这会自动在视图上的每个ajax请求中重新执行,这样您就不需要将其复制到视图中可以进行ajax更新的多个单独位置,或者在每个位置重复其父ID <f:ajax render>
.
归档时间: |
|
查看次数: |
27597 次 |
最近记录: |