3

私は次のコードを持っています:

Button export = new Button("CSV");
export.addListener(new ClickListener() 
{
    public void buttonClick(ClickEvent event) 
    {
        CsvExport csvExport;
        csvExport = new CsvExport(_table);
        csvExport.setDisplayTotals(false);
        csvExport.setDoubleDataFormat("0");
        csvExport.excludeCollapsedColumns();
        csvExport.setReportTitle("Document title");
        csvExport.setExportFileName("Nome_file_example.csv");
        csvExport.export();

        getWindow().showNotification("Document saved", "The document has been exported.");
    }
}

ファイルがエクスポートおよびダウンロードされた後にのみ通知を表示したいのですが、実際には通知が機能していません。おそらく、ステートメントを「待機」していないためです。

csvExport.export();

終わる。コメントすると、通知が機能します。

誰か提案はありますか?

どうもありがとう、

4

1 に答える 1

1

作業を別のスレッドに分割してから、ユーザーに「後で」通知する方法を提供する必要があります。

したがって、最初にスレッドを作成します... Java EEを使用している場合は、組み込みのスレッドプールを使用します。それ以外の場合は、別のスレッドを使用します(Tomcatを使用しているので、独自にロールして、より適切に制御できるようにします)。

次に、完了したら、スレッドを同期し、UIクラスに戻り(Groovyのクロージャーを使用しますが、独自のリスナーを作成できます)、メソッドを呼び出してユーザーに通知します。window.showNotification('All Done')

これがトリッキーな部分です。ユーザーに通知しましたが、Vaadinはすでに「クリック」応答を送り返しています...サーバー部分はユーザーに通知されたと見なしますが、まだユーザーを表示できません。 。何かが変更されたかどうかを5秒ごとにサーバーに確認するため、ページに 進行状況インジケーターが必要です。

「プッシュ」プラグインもいくつかありますが、スレッドをスピンアップしているほとんどの場所で「読み込み中」のアニメーションを表示したいので、進行状況インジケーターが適切に機能することがわかりました。

于 2012-11-24T07:25:40.340 に答える