Am Anfang versuche ich den Kontext zu beschreiben. Ich habe eine Schaltfläche, die beim Klicken Datei mit Daten aus relevanten Tagen zurückgibt. Wenn die Schaltfläche geklickt wird, führe ich eine Abfrage (mit Daten von-bis) zur DB aus und parse Daten in das richtige Format und gebe als StreamResource
an FileDownloader
zurück. Alle Klassen sind von Vaadin
Pakete.FileDownloader - verschiedene Verhaltensweisen, die vom Browser abhängen
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());
});
Alle funktioniert gut in Chrome und IE-Browser. In Mozilla Firefox ist das nicht. Geben Sie im Firefox-Browser immer das alte Objekt StreamResource
zurück. Immer die gleiche Datei zurückgeben, es sieht so aus, als würde Firefox von der Art des Caches übernehmen, denn im Log finde ich das Event für Firefox keine Aktion klicken, keine Aktion. In Chrome und IE sind Protokolle vorhanden.
Alle Browser sind auf dem neuesten Stand. Vaadin
Version: 7.7.6
Haben Sie eine Idee, warum es passiert? Oder was kann ich anders machen, um Dateien herunterzuladen?
bearbeiten ///
Ich fand Lösung, aber ich weiß nicht, ob es nur vorübergehend ist. Nach der Neuinstallation des Browsers tritt merkwürdiges Verhalten nicht mehr auf. Wenn es mehrere Tage funktioniert, werde ich es als Lösung nehmen.
Sie müssen den Klick-Listener nicht zu Ihrer Schaltfläche hinzufügen, der DateiDownloader.extend (btExport) sollte ausreichen. –
@Chris M es reicht, wenn Daten als 'StreamResource' nicht dynamisch geändert werden (ohne Refresh-Seite). In meinem Fall, wie ich geschrieben habe, wurden die Daten abhängig von den gewählten Daten geändert, so dass ich beim Klicken auf die Schaltfläche 'frische' Daten als 'StreamResource' eingeben muss. – newOne
Der serverseitige Klick-Listener wird ausgeführt, nachdem der Download gestartet wurde, nicht vorher. Die beste Abhilfe ich weiß, ist 'FileDownloader.getFileDownloadResource' oder' FileDownloader.handleConnectorRequest' außer Kraft zu setzen und Ihre Strom-Erzeugungs-Logik hat es '' 'java öffentliche Ressource getFileDownloadResource() { setFileDownloadResource (getReportsStream()); return super.getFileDownloadResource() } '' ' –