2017-12-13 4 views
0

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.

+0

Sie müssen den Klick-Listener nicht zu Ihrer Schaltfläche hinzufügen, der DateiDownloader.extend (btExport) sollte ausreichen. –

+0

@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

+1

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() } '' ' –

Antwort

0

Zuerst teste ich auf Firefox 49, nachdem ich Firefox 57 installiert habe, aber nichts ändert sich. Nur wenn ich den Cache säubere und jeder übrig bleibt sieht es so aus als ob es funktioniert. Ich überprüfe auf anderen Computern und funktioniert auf Version 57 und funktioniert nicht auf Version 49.

Die Schlussfolgerung ist, aktuelle Browser zu haben und sicher sein, die alte Version des Browsers zu deinstallieren und aufzuräumen.

Verwandte Themen