我需要重新执行形式被重新呈现刚过的JavaScript。 简单地说,将在javascript XHTML内容后,不会因为它的部分请求帮助。 另外,我无法使用“的onComplete”的命令按钮从我重新呈现形式是在几个地方使用JSF组件。 我需要修复的地方。
有什么办法? 我想知道是否F:阿贾克斯将有助于改善这种情况。
请让我知道,如果任何人有关于它的线索。
我需要重新执行形式被重新呈现刚过的JavaScript。 简单地说,将在javascript XHTML内容后,不会因为它的部分请求帮助。 另外,我无法使用“的onComplete”的命令按钮从我重新呈现形式是在几个地方使用JSF组件。 我需要修复的地方。
有什么办法? 我想知道是否F:阿贾克斯将有助于改善这种情况。
请让我知道,如果任何人有关于它的线索。
最简单的方法是只把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请求重新excuted,这样你就不需要它在多个单独的地方可以是Ajax的更新,或者重复其父ID在每一个视图复制<f:ajax render>
。
如果你想要做复杂的操作与jQuery / JS并不会特别在意BalusC第一个答案是最合适这个
对于更复杂的JS,如果你决定使用一个全球性的事件处理程序,比如你用JS bind
功能的元素,这些功能都将被重新绑定(因此执行两次),所以你需要一些方法来确定哪些需要要被重新执行。
我终于做到了,是从事件回调获得ID和仅执行相关的JS / JQuery的:
jsf.ajax.addOnEvent(ajaxCompleteProcess);
function ajaxCompleteProcess(data) {
if (data.status && data.status === 'success') {
var children1 = data.responseXML.children;
for (i = 0; i < children1.length; i += 1) {
var children2 = children1[i].children;
for (j = 0; j < children2.length; j += 1) {
var children3 = children2[j].children;
for (y = 0; y < children3.length; y += 1) {
if (children3[y].id.indexOf('javax.faces.ViewState') != -1)
continue;
elementProcess(('#' + children3[y].id.replace(/\:/g, '\\:')));
}
}
}
}
}
注意:这些丑陋for
循环很可能不是必需的(你可以使用clildren [0]),但我还没有发现的时候还没有来检查规范。
你可以添加的jQuery到你的应用程序并执行类似:
$(#yourComponentId).load(function(){
//execute javascript.
});
你可以在这里看看http://api.jquery.com/load/
LE:那是上
$(document).ready(function(){
}
OFC。