在表单重新渲染之后,我需要重新执行javascript。简单地说,将javascript放在XHTML内容之后是没有帮助的,因为它是部分请求。此外,我不能使用“JSF”,因为我要重新呈现表单的commandButton是在多个地方使用的onComplete组件。我需要在本地解决这个问题。
有什么办法吗?我想知道f:ajax在这种情况下是否会有所帮助。
如果有人知道这件事,请告诉我。
发布于 2012-10-26 18:54:09
最简单的方法是将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>someFunction();</h:onloadScript>
对于视图上的每个ajax请求,它都会自动重新执行,这样您就不需要将它复制到视图中可以由ajax更新的多个单独位置上,也不需要在每个<f:ajax render>
中重复其父ID。
发布于 2012-10-26 15:20:06
您可以将jQuery添加到您的应用程序中,并执行以下操作:
$(#yourComponentId).load(function(){
//execute javascript.
});
你可以在这里看看http://api.jquery.com/load/
乐:那是开着的
$(document).ready(function(){
}
ofc。
https://stackoverflow.com/questions/13081129
复制相似问题