我需要将 Primefaces AJAX 状态对话框的显示延迟 X 毫秒,但 OmniFaces ExceptionHandler 对 javascript 超时解决方案的 react 很差。
这是我到目前为止所得到的:
<p:ajaxStatus onstart="showStatusDialog();" onsuccess="hideStatusDialog();" onerror="hideStatusDialog();"/>
<script type="text/JavaScript">
var statusDlgTimer = null;
function showStatusDialog()
{
if (statusDlgTimer === null)
{
statusDlgTimer = setTimeout("statusDialog.show()", 700);
}
}
function hideStatusDialog()
{
if (statusDlgTimer !== null)
{
clearTimeout(statusDlgTimer);
statusDialog.hide();
statusDlgTimer = null;
}
}
</script>
只要 AJAX 调用中没有发生错误,这就能完美运行。我正在使用 OmniFaces FullAjaxExceptionHandler 来处理 AJAX/非 AJAX 异常。
我的假设是,由于在呈现错误页面时重新加载了 JavaScript,因此从未检测到对 statusDlgTimer 的引用为 !== null,但我还没有找到好的解决方法。
最佳答案
FullAjaxExceptionHandler
基本上用错误页面的内容替换整个 HTML 文档树,特此替换 <p:ajaxStatus>
“迷路”及其 oncomplete
永远不会被调用。你基本上需要调用 hideStatusDialog()
也来自错误页面的 HTML 源代码。也许是这样的:
<h:outputScript target="body">hideStatusDialog();</h:outputScript>
更好的是,使用
$(document).ajaxStart()
, ajaxComplete()
和 ajaxError()
在全局 JS 文件中而不是整个 <p:ajaxStatus>
.
关于jsf - 我需要将 Primefaces AJAX 状态对话框的显示延迟 X 毫秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18916641/