如何在JSF上延迟Primefaces AjaxStatus?

时间:2016-06-13 06:18:22

标签: ajax jsf primefaces

如何在Primefaces'上添加延迟(例如300ms)。 AjaxStatus会显示出来。现在,当Ajax请求未决时,它会立即显示。这很麻烦,比如在" onkeyUp"每个键击使一次瞬间加载对话的事件。

这是我的AjaxStatus加载指标组件:

<p:ajaxStatus id="startAjax" onstart="PF('start').show();" oncomplete="PF('start').hide();" >
</p:ajaxStatus>

<p:dialog widgetVar="start" showHeader="false" resizable="false">
    <h:graphicImage value="#{resource['/images/loading.gif']}"></h:graphicImage>
</p:dialog>

2 个答案:

答案 0 :(得分:14)

你需要将你的PF(&#39; start&#39;。)start()包含一个将延迟调用它的函数。此外,onComplete处理程序应检查您是否有待显示和取消它们的待处理状态。这是为了避免ajax在显示状态之前完成的情况。

代码应该是这样的(未经测试)

<p:ajaxStatus id = "startAjax" onstart = "startHandler();" oncomplete = "endHandler();"/>
    <script>
        var ajaxInProgress;
        function startHandler() {
            ajaxInProgress = setTimeout(function () {
                PF('start').show();
            }, 3000);
        }
        function endHandler() {
            clearTimeout(ajaxInProgress);
            PF('start').hide();
            ajaxInProgress = null;
        }
    </script>

答案 1 :(得分:1)

我提交了一份PR,该延迟属性将在PF 7.1+中原生。

https://github.com/primefaces/primefaces/pull/5138

谢谢你的建议!