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

标签 jsf primefaces omnifaces

我需要将 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/

相关文章:

使用消息包的 JSF 本地化和多元化

java - 如何将HashMap显示为DataTable

java - 为什么 Omnifaces Websocket <o :socket> not working with Websphere 9?

JSF2.0 在使用 commandButton 时如何将 viewParam 传递到请求范围的支持 bean?

servlets - 从 HttpServletRequest 获取美化后的 URL

java - 在 JSF 中,from-view-id 和 from-tree-id 之间有什么区别?

jsf - 在 Primefaces 中的不同布局单元之间拖放

java - Primefaces 动态列,以编程方式

jsf - p :dataExporter does not recognize p:cellEditor

jsf - 如何在 primefaces 中通过 javascript 触发组件刷新?