如何在JSF 2.0中处理AJAX请求?

时间:2012-05-10 05:57:58

标签: jquery jsf-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事件?

2 个答案:

答案 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.statusbegincomplete。另见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
})