開始時に、私は文脈を記述しようとします。私は関連する日からのデータをクリックしてファイルを返すボタンを持っています。ボタンをクリックすると、日付(from-to)のクエリをDBに変換し、データを適切な形式に解析し、StreamResource
をFileDownloader
に返します。すべてのクラスはVaadin
パッケージです。FileDownloader - ブラウザに依存する異なる動作
Button btExport = new Button("Export");
FileDownloader fileDownloader = new FileDownloader(getReportsStream());
fileDownloader.extend(btExport);
//update resource to download on click
btExport.addClickListener(event -> {
fileDownloader.setFileDownloadResource(getReportsStream());
});
ChromeとIEブラウザですべて正常に動作します。 Mozillaでは、Firefoxはそうではありません。 Firefoxブラウザでは、常に古いStreamResource
オブジェクトを返します。常に同じファイルを返します。Firefoxのキャッシュのようなものです。ログには、Firefoxのイベントクリックが表示されないため、何らかのアクションがあります。 ChromeとIEのログが存在します。
すべてのブラウザが最新です。 Vaadin
バージョン:7.7.6
あなたはなぜそれが起こるか考えていますか?ファイルをダウンロードするのに別の方法で何をすることができますか?
編集///
は、私は解決策を見つけたが、それは一時的なものであれば、私は知りません。ブラウザを再インストールした後、それはもはや異常な動作が発生しなくなりました。数日後にうまくいけば、私は解決策としてそれを取るでしょう。
ボタンにクリックリスナーを追加する必要はありません.fileDownloader.extend(btExport)で十分です。 –
@Chris M「StreamResource」としてのデータが動的に(リフレッシュページなしで)変更されない場合は十分です。私の場合、私が書いたように、データは選択された日付に応じて変更されたので、ボタンをクリックすると、「新鮮な」データを「StreamResource」として入力する必要があります。 – newOne
サーバーのサイドクリックリスナーは、ダウンロードが開始された後に実行されます。私が知っている 最適な回避策は '' 'javaの パブリックリソースgetFileDownloadResource(){ setFileDownloadResource(getReportsStream()) ' FileDownloader.getFileDownloadResource'または 'FileDownloader.handleConnectorRequest'をオーバーライドして、そこに自分のストリーム生成ロジックを持つことです。 return super.getFileDownloadResource() } '' ' –