mat*_*tsa 5 jsf primefaces omnifaces
我需要将Primefaces AJAX Status对话框的显示延迟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>
Run Code Online (Sandbox Code Playgroud)
只要AJAX调用中没有错误发生,这就完美地工作.我正在使用OmniFaces FullAjaxExceptionHandler来处理AJAX /非AJAX异常.
我的假设是,因为在呈现错误页面时重新加载JavaScript,所以从未检测到对statusDlgTimer的引用是!== null,但我还没有找到一个好的解决方法.
FullAjaxExceptionHandler
基本上用错误页面的内容替换整个 HTML 文档树,因此“<p:ajaxStatus>
迷失”并且oncomplete
永远不会调用它。您基本上还需要hideStatusDialog()
从错误页面的 HTML 源内部调用。也许是这样的:
<h:outputScript target="body">hideStatusDialog();</h:outputScript>
Run Code Online (Sandbox Code Playgroud)
更好的是,在全局 JS 文件中使用$(document).ajaxStart()
,ajaxComplete()
和ajaxError()
而不是整个<p:ajaxStatus>
.
归档时间: |
|
查看次数: |
3671 次 |
最近记录: |