2

これは、サーバーがファイルのダウンロードを準備している間、待機スピナー アイコンを表示することを目的としています。私の使用例では、大きなレポートを生成しています。これは、ブラウザのダウンロード/名前を付けて保存プロンプトが呼び出される前に、サーバー側で時間がかかります。待機スピナーは問題なく表示できますが、クリアする方法を見つけるのに苦労しています。

現在の関連コード:

<h:commandButton id="generate" value="Generate Report" type="submit" 
    action="#{bean.generateReport()}" 
    onclick="#{rich:component('waitIcon')}.start();"/>

<a4j:status id="waitIcon">
     <f:facet name="start">
       <h:graphicImage value="/images/ai.gif" alt="ai" />
    </f:facet>
</a4j:status>

bean.generateReport()サーバー側で 1 ~ 10 秒かかり、ダウンロード応答を返すアクションはどこにありますか。

これは、.start() や .stop() などの便利な API を提供するため、richfaces a4j:status インジケーターを使用していますが、任意の dom 要素と可視性を設定することもできます。問題は、フックする適切なイベントを取得できないことです。onresponsereceived のようなものをキャプチャする必要があります...

私が試した解決策:

を使用a4j:commandButtonするとイベントが提供されますoncompleteが、ボタンはダウンロードを開始できない AJAX 要求を生成します。( h:command ボタンの oncomplete アクションを参照)

関数を使用してコンポーネントwindow.timeoutを呼び出す。.stop()これは機能レベルで機能しますが、生成時間は 1 ~ 10 秒の間でかなり大きく変動するため、インジケーターは現実を反映していません。

これを処理するための良いアイデアはありますか?

4

3 に答える 3