0

dataTable からすべてのデータをエクスポートできるダウンロード実装があります。大量のデータがエクスポートされている場合、ユーザーはアプリケーションのどこも押さないでください。現在のエクスポート プロセスが中止され、「EJB Invocation failed on component.....」または「 XyzBean が見つかりませんでした」。

したがって、私の考えは、ダウンロード プロセスが進行中の間はボタンを押すことを禁止することです。PhaseListener を使用することを考えましたが、リクエストをインターセプトする方法がわかりません。待望の動作は、ダウンロード プロセスが進行している限り、ユーザーがどこかを押しても GUI で何も起こらないことです。ダウンロードの開始時に変数を設定し、ダウンロードの終了時に設定を解除できます。したがって、ブロックするタイミングはわかっていますが、このブロックがどのように見えるかはわかりません。何か案は?

RichFaces 4.2 で JBoss 7.1.1 を使用しています。

4

3 に答える 3

0

おそらくあなたができる最も簡単なことは、ダウンロード中にプログレスバーまたはいくつかの通知を備えたモーダルポップアップパネルを使用することです。ダウンロードが終了したら、ポップアップパネルを閉じるだけです。

これがサンプルですが、設定したくないonmaskclickを定義しています: http ://showcase.richfaces.org/richfaces/component-sample.jsf?demo = popup&sample = modalPopup&skin = emeraldTown

于 2012-06-22T07:21:50.557 に答える
0

このソリューションにより、ビュー内のすべてのボタンがラッチされるため、ダウンロードが進行中でボタンを押すと、この要求は破棄されます。これは基本的には機能しますが、まだクラッシュすることがありますが、これは別の問題に関連していると思います。

最初のダウンロード方法で、現在のセッションにフラグを追加します。

HttpSession session = (HttpSession) facesContext.getExternalContext().getSession(false);
session.setAttribute("DOWNLOAD_IN_PROGRESS", "true");

ダウンロード方法の最後に、このフラグを false に設定します...

session.setAttribute("DOWNLOAD_IN_PROGRESS", "false");

フェーズ リスナー (faces-config に追加されています) で、現在進行中のダウンロードがあるかどうかを確認します。その場合は、リクエストを破棄してください。

@Named
@Logged
public class DownloadLatchPhaseListener implements PhaseListener
{
    private static final long serialVersionUID = -8603272654541248512L;

    @Override
    public void beforePhase(PhaseEvent event)
    {
        HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);

        if (session != null && "true".equals(session.getAttribute("DOWNLOAD_IN_PROGRESS")))
        {
            FacesContext.getCurrentInstance().responseComplete();
        }
    }

    @Override
    public void afterPhase(PhaseEvent event)
    {
        // not used
    }

    @Override
    public PhaseId getPhaseId()
    {
        return PhaseId.RESTORE_VIEW;
    }
}
于 2012-06-20T10:23:08.340 に答える
0

Primefaces でクライアント側のソリューション ( と呼ばれる) を使用する方がよいと思いますBlockUIが、このコンポーネントBlockUIを取得しましたが、使用RichFacesしていて、持っていないので...

BlockUI の jQuery プラグインを直接使用できます

于 2012-06-19T08:19:49.453 に答える