5

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 であることが検出されないということですが、まだ適切な回避策を見つけることができていません。

4

2 に答える 2

4

は、基本的FullAjaxExceptionHandlerに HTML ドキュメント ツリー全体をエラー ページのコンテンツに置き換えます。基本的に、エラー ページの HTML ソース内からも呼び出す必要があります。おそらく次のようなものです:<p:ajaxStatus>oncompletehideStatusDialog()

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

いっそのこと、全体の代わりにグローバル JS ファイルで$(document).ajaxStart()ajaxComplete()を使用します。ajaxError()<p:ajaxStatus>

于 2013-09-20T12:41:30.890 に答える