我正在尝试下面的事情 -
<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事件?
答案 0 :(得分:4)
标准JSF impl不使用jQuery API发送ajax请求。 JSF使用自己的内部API,您可以在自动包含的jsf.js
文件中找到它。所以从不调用jQuery jQuery.ajaxComplete()
。只有在使用jQuery的$.ajax()
(及其快捷方式$.get()
,$.post()
等)时才会调用它。只有基于jQuery的组件库使用它们,例如带有<p:commandXxx>
和<p:ajax>
的PrimeFaces。对于标准JSF <f:ajax>
,您需要使用JSF自己的jsf.ajax.addOnEvent()
处理程序,或onevent
的{{1}}属性。
在您的特定情况中,我认为<f:ajax>
属性很简单:
onevent
与
<f:ajax ... onevent="btnOKhandler" />
function btnOKhandler(data) {
if (data.status == 'success') {
$.modal.close();
}
}
可以有3个值:data.status
,begin
和complete
。另见JSF specification的表14-4和14-3。
答案 1 :(得分:0)
这对我有用,而不是$(document).ajaxComplete();
RichFaces.jQuery(document).on( 'ajaxcomplete', function(event, xhr, settings){
console.log(event, xhr, settings);
// event, undefined, undefined
})