如何在JSF上延迟Primefaces AjaxStatus?

Ste*_*ers 9 ajax jsf primefaces

如何在Primefaces的AjaxStatus显示时添加延迟(例如300ms).现在它总是立即显示有待处理的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>
Run Code Online (Sandbox Code Playgroud)

Mik*_*bel 14

你需要用你的PF('start').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>
Run Code Online (Sandbox Code Playgroud)