如何在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>
最佳答案
您需要使用一个函数来包装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>