从jsf.ajax.addOnEvent()中止JSF Ajax请求

时间:2012-01-19 10:11:31

标签: ajax jsf jsf-2

我希望有一个中心位置来监控ajax请求,并在某些情况下中止它们。

我唯一不知道要做的是实际中止来自一个中心函数的ajax请求。

我想,解决方案看起来像这样:

jsf.ajax.addOnEvent(function(data) { 
    if (data.status === 'begin') {
        // abort the ajax request
    }
});

但我可能错了。

谢谢!

3 个答案:

答案 0 :(得分:3)

标准JSF JS API无法做到这一点。最好的办法是在调用JSF组件上添加onclickonchange处理程序,如果满足所需条件则返回false以中止ajax请求。

<h:commandButton onclick="return mayFireAjax(this)">
    <f:ajax />
</h:commandButton>

如果需要,您可以使用常规选择器上的jQuery.on()(或jQuery.delegate()jQuery.live()取决于所使用的jQuery版本)来抽象它,这样您就不需要重复它了在每个所需的组件上。

$(someSelector).on("click", function() {
    return mayFireAjax(this);
});

答案 1 :(得分:1)

如果您已控制源,则可以始终将onClick附加到UICommand组件。但在某些情况下,您无权访问源。例如,ajax由某些第三方组件提供。你不想搞砸他们的组件。

首先,我有一个小型的js库。

var FxJSFBegin = "JSFBegin";

if (jsf) {

    var originalRequest = jsf.ajax.request;

    jsf.ajax.request = function(source, oevent, options) {

        var event = $.Event(FxJSFBegin);

        event.options = options;

        event.originalEvent = oevent;

        $(source).trigger(event);

        if (event.isDefaultPrevented()) {

            return;

        } else {

            originalRequest.apply(null, arguments);

        }

    };

}

这段代码代理了原始的JSF ajax调用。它使用jQuery来触发“JSFBegin”事件。集成代码可以使用jQuery机制监听此事件。监听器可以使用event.preventDefault()取消jsf调用。

要求:

  1. 的jQuery
  2. 此片段代码应在加载jsf.js后放置。

答案 2 :(得分:-1)

使用global =“false”将帮助您阻止调用ajax调用的ajax状态。请参阅以下链接。

Different Ajax statuses for different components in PrimeFaces

相关问题