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>
これは、AJAX 呼び出しでエラーが発生しない限り、完全に機能します。OmniFaces FullAjaxExceptionHandler を使用して、AJAX/非 AJAX 例外を処理しています。
私の仮説は、エラー ページがレンダリングされるときに JavaScript がリロードされるため、statusDlgTimer への参照が !== null であることが検出されないということですが、まだ適切な回避策を見つけることができていません。