2

我正在尝试类似下面的东西 -

<h:commandButton id="btnOK">
     <f:ajax event="action" execute="@this" render="idHeader"       
listener="#{myBean.actionSubmit()}"/>
</h:commandButton>

我希望当该 ajax 请求完成时,在 UI 中进行一些处理。我为此使用以下 jQuery 代码:

$(document).ajaxComplete(function() {
    $.modal.close();
});

但我的问题是 jQuery 方法根本没有被触发。我想知道 JSF ajax 提交是否会触发 ajaxComplete 事件?

4

2 回答 2

4

标准的 JSF impl 不使用 jQuery API 来发送 ajax 请求。JSF 使用它自己的内部 API,您可以在自动包含的jsf.js文件中找到它。所以 jQueryjQuery.ajaxComplete()永远不会被调用。$.ajax()只有在使用 jQuery (及其快捷方式$.get(),$.post()等)时才会调用它。只有基于 jQuery 的组件库使用它们,例如 PrimeFaces<p:commandXxx><p:ajax>. 对于标准 JSF <f:ajax>,您需要使用 JSF 自己的处理jsf.ajax.addOnEvent()程序,或者.onevent<f:ajax>

您的特定情况下,我认为该onevent属性很简单:

<f:ajax ... onevent="btnOKhandler" />

function btnOKhandler(data) {
    if (data.status == 'success') {
        $.modal.close();
    }
}

可以有 3个data.status值:begin和。另请参见JSF 规范的表 14-4 和 14-3 。completesuccess

也可以看看:

于 2012-05-10T13:20:21.227 回答
0

这对我有用,而不是 $(document).ajaxComplete();

RichFaces.jQuery(document).on( 'ajaxcomplete', function(event, xhr, settings){   
     console.log(event, xhr, settings);
      // event, undefined, undefined
})
于 2017-08-30T08:08:27.560 回答