2017-11-14 5 views
1

私のシナリオは:Vaadin 7.7.10を使用して、生成されたファイルをクリックして生成します。Vaadin 7 - 動的に作成されたファイルの即時ダウンロード

私は、byte[](必要に応じてOutputStreamに簡単に変更することもできます)を返すジェネレータメソッドを持っています。それからStreamResourceを作成します。だから私はリソースをダウンロードする準備ができているが、今は何ですか?

FileDownloaderでアプローチを使用することはできませんが、実際には拡張ボタンを実際にクリックする前にページが表示されるたびにファイルを生成する必要があるためです(そうしたくありません要求に応じてのみ使用される非常に高価な操作)。

私は Page.getCurrent().open(streamResource, null, false)を使用して所望の効果を達成することができましたが、 Resource引数を持つ .openは7をVaadinで廃止されましたので、私は

は、任意の回避策または別のアプローチにあります...たくない、それに依存していますこの?

+3

FileDownloaderをクリックしてファイルを生成できないのはなぜですか?あなたがStreamSourceを実装するカスタムクラスを作っていると思っています。 getStreamメソッドをオーバーライドしてファイル生成を行うことができますか? – Jay

+0

このスレッドを見てください:https://vaadin.com/forum#!/thread/2864064 –

+1

あなたは正しい、ジェイ。 StreamSourceのカスタムクラスをonClickイベントの中に入れてしまったので混乱していました。「これはクリック後のみですが、実際のクリックの前にFileDownloaderを拡張する必要があります」のようでした。私がする必要があったのは、生成コードをコンストラクタの中に置き、FileDownloaderを拡張することだけでした。それからそれは "オンデマンド"で正しく動作します。 – Ellrohir

答えて

1

Vaadin FileDownloaderこれをカスタマイズしても処理できる可能性があります。しかし、私はかつて異なるアプローチで報告システムを作成しました。考え方は、コンストラクタのパラメータとしてStreamResourceを取るコンポーネントBrowserFrameを使用することです。

ファイルの生成は、たとえばボタンをクリックするなどして開始されます。生成が完了すると、結果はbyte[]になります。 からStreamSourceが作成され、StreamResouceを作成するために使用され、次にBrowserFrameの内容として使用されます。

最後に、このBrowserFrameがブラウザに反応するどこかのuiに追加されます。

私の場合、必要に応じてユーザーが最初にプレビューしてダウンロードできるパラメータ化されたPDFレポートを生成する必要がありました。私はbyte[]を提供したPDFジェネレータを持っていました。ファイル名拡張子.pdfのブラウザ認識タイプと、プレビュー用PDFプラグイン&がダウンロードされました。

byte[]には、BrowserFrameを構成し、適切なファイル名の拡張子を設定するためにバイナリを入れることができます。

ファイルが準備中にバックグラウンドで生成され、BrowserFrameコンポーネントが添付されている間に、進行状況インジケータが表示されているなど、一部のファイルをにすることもできます。

関連する問題