Jsf 我需要将Primefaces AJAX状态对话框的显示延迟X毫秒

Jsf 我需要将Primefaces AJAX状态对话框的显示延迟X毫秒,jsf,primefaces,omnifaces,Jsf,Primefaces,Omnifaces,我需要将Primefaces AJAX状态对话框的显示延迟X毫秒,但OmniFaces ExceptionHandler对javascript超时解决方案的反应很差 以下是我目前得到的信息: <p:ajaxStatus onstart="showStatusDialog();" onsuccess="hideStatusDialog();" onerror="hideStatusDialog();"/> <script type="text/JavaScript">

我需要将Primefaces AJAX状态对话框的显示延迟X毫秒,但OmniFaces ExceptionHandler对javascript超时解决方案的反应很差

以下是我目前得到的信息:

<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>

var statusDlgTimer=null;
函数showStatusDialog()
{
如果(statusDlgTimer===null)
{
statusDlgTimer=setTimeout(“statusDialog.show()”,700);
}
}
函数hideStatusDialog()
{
if(statusDlgTimer!==null)
{
clearTimeout(statusDlgTimer);
statusDialog.hide();
statusDlgTimer=null;
}
}
只要AJAX调用中没有错误,这就可以完美地工作。我使用OmniFaces FullAjaxExceptionHandler来处理AJAX/非AJAX异常


我的假设是,由于在呈现错误页面时会重新加载JavaScript,因此从未检测到对statusDlgTimer的引用!==null,但我还没有找到一个好的解决方法。

FullAjaxExceptionHandler基本上用错误页面的内容替换了整个HTML文档树,因此,
“get lost”及其
oncomplete
永远不会被调用。您基本上还需要从错误页面的HTML源内部调用
hideStatusDialog()
。也许是这样的:

<h:outputScript target="body">hideStatusDialog();</h:outputScript>
hideStatusDialog();

更好的是,使用,在一个全局JS文件中,而不是在整个
中,在一个同事的帮助下,我实际上找到了另外两个解决方法,后者类似于BalusC的解决方案

  • 通过设置变量“var displaydialog=false”onload,并在设置对话框超时之前将其设置为true。在实际显示变量之前,我在中间函数中检查了相同的变量。虽然有点困难,但还是奏效了
  • 我的JavaScript包含在Facelets模板中,错误页面也使用了该模板。通过创建另一个模板,我可以使用ui:insert来避免将JavaScript插入错误页面,并且不会显示对话框。我同意这个解决方案