2017-12-13 21 views
0

開始時に、私は文脈を記述しようとします。私は関連する日からのデータをクリックしてファイルを返すボタンを持っています。ボタンをクリックすると、日付(from-to)のクエリをDBに変換し、データを適切な形式に解析し、StreamResourceFileDownloaderに返します。すべてのクラスは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

あなたはなぜそれが起こるか考えていますか?ファイルをダウンロードするのに別の方法で何をすることができますか?

編集///

は、私は解決策を見つけたが、それは一時的なものであれば、私は知りません。ブラウザを再インストールした後、それはもはや異常な動作が発生しなくなりました。数日後にうまくいけば、私は解決策としてそれを取るでしょう。

+0

ボタンにクリックリスナーを追加する必要はありません.fileDownloader.extend(btExport)で十分です。 –

+0

@Chris M「StreamResource」としてのデータが動的に(リフレッシュページなしで)変更されない場合は十分です。私の場合、私が書いたように、データは選択された日付に応じて変更されたので、ボタンをクリックすると、「新鮮な」データを「StreamResource」として入力する必要があります。 – newOne

+1

サーバーのサイドクリックリスナーは、ダウンロードが開始された後に実行されます。私が知っている 最適な回避策は '' 'javaの パブリックリソースgetFileDownloadResource(){ setFileDownloadResource(getReportsStream()) ' FileDownloader.getFileDownloadResource'または 'FileDownloader.handleConnectorRequest'をオーバーライドして、そこに自分のストリーム生成ロジックを持つことです。 return super.getFileDownloadResource() } '' ' –

答えて

0

最初に私はFirefox 57をインストールした後、Firefox 49をテストしていますが、何も変わりません。私がキャッシュを清掃し、それぞれが残っている場合にのみ、それは動作するように見えます。私は別のコンピュータをチェックし、バージョン57で動作し、バージョン49で動作しません。

結論として、最新のブラウザを使用し、古いバージョンのブラウザをアンインストールしてからクリーンアップしてください。

関連する問題