2015-01-12 3 views
5

Ich habe eine @ JavaScript-Annotation in meiner Anwendung, um eine .js-Datei aus dem Klassenpfad zu laden.Vaadin @Javascript: Cache für aktualisierte JS-Datei löschen

Jetzt habe ich ein Update für die Datei und neu implementiert (lokal), aber ich bekomme immer die alte Version zurück. Ich habe versucht, alles neu zu laden (Strg + R, Strg + F5), aber das funktioniert nicht und ich würde auch nicht wollen, dass die Benutzer das tun müssen.

Ein Trick, den ich in der Vergangenheit (ohne Vaadin) verwendet habe, war, einen Anfrageparameter an die Version anzuhängen (z.B.? Version = 1) und dieses zu aktualisieren, so dass sich die URL ändert. Aber das ist anscheinend nicht für die @ Java-Annotation erlaubt (Vaadin versucht nicht einmal, die Datei zu laden).

+0

Möglicherweise verwendet Ihre App die @PreserveOnRefresh-Annotation auf dem Benutzeroberflächenobjekt? Dies könnte Vaadin daran hindern, JS neu zu laden. –

+0

Nein, ich verwende @PreserveOnRefresh nicht. Außerdem hatte ich den Server neu gestartet, so dass es keinen Unterschied gemacht hätte. Ich habe gerade den Dateinamen geändert (hinzugefügt _vxxx, wobei xxx eine Zahl ist) und das funktioniert. – herman

+0

Sie sagen also, dass sogar ein Server-Neustart die "alte" Datei behalten hat? Könntest du einen 'find' für die Datei in deinem Ziel-Verzeichnis machen? könnte sein, dass es mehrmals da ist (zum Beispiel einmal von deiner Idee und einmal von deinem Bauwerkzeug). Wenn beide im Klassenpfad sind, wird nur einer abgeholt. – cfrick

Antwort

2

Ich habe dies überwinden, indem die resourceCacheTime Parameter der Vaadin Servlet-Konfiguration verwendet:

@VaadinServletConfiguration(ui = MyUI.class, resourceCacheTime = 0) 

Obwohl es seine Begrenzung hat, wie in meiner Antwort auf another question here beschrieben.

1

Dies ist Browser-Funktion zum lokalen Cache-JS-Dateien, nichts mit Vaadin zu tun.

Wie Sie es selbst herausfinden: Wenn Sie sicherstellen möchten, dass Benutzer die neueste Version der JS-Datei haben, sollten Sie den JS-Dateinamen umbenennen in: .

+0

Ich stimme nicht zu, dass dies nichts mit Vaadin zu tun hat: Es gibt Möglichkeiten für Web-Anwendungen, dem Browser zu sagen, dass sie z. bestimmte Ressourcen nicht zwischenzuspeichern. Ich habe die Antwort gefunden, die Datei selbst umzubenennen, aber das ist wirklich ein Hack. Zumindest könnte ich einen Anforderungsparameter hinzufügen, würde verhindern, dass ich den tatsächlichen Namen der Datei in der Versionskontrolle ändern müsste. – herman

+0

Nach einem Neustart des Containers wird die neue Datei definitiv neu von der CD geladen und ein CTRL-F5 wird mindestens in Fx in der Standardkonfiguration neu geladen, um die neue Datei zu laden. – cfrick

0

Verwenden Sie die Inkognito-Funktion von Chrome (und verwenden Sie sie nicht, wenn Sie scharfe/unliebsame Websites besuchen).

Öffnen Sie einfach Ihren Browser im Inkognito-Modus https://support.google.com/chrome/answer/95464?hl=en und der Browser wird nichts zwischenspeichern.

Andere Browser haben diese Funktion ebenfalls (Opera, IE, Firefox, Safari).

+0

Ich möchte nicht, dass meine Benutzer meine Web-App im Inkognito-Modus besuchen müssen, um sicherzustellen, dass sie über die neuesten JavaScript-Dateien verfügen. Vaadin sollte eine Möglichkeit bereitstellen, dem Browser mitzuteilen, dass sie nicht zwischengespeichert werden sollen, oder er kann das Hinzufügen von Anforderungsparametern zu dem Namen unterstützen, sodass Dateien nicht physisch umbenannt werden müssen. – herman

+0

Sicher, ich stimme dir zu, ich dachte du brauchst es nur für die Entwicklung. – tonix

0

Wie ich in meinem Kommentar zu der Frage am 12. Januar festgestellt habe, funktionierte das Umbenennen der Datei. Dies scheint derzeit der einzige Weg zu sein, obwohl es alles andere als ideal ist.