2016-04-07 7 views
2

Ich habe eine benutzerdefinierte Javascript-Komponente in meiner Vaadin-Anwendung, die AbstractJavaScriptComponent erweitert.Vaadin AbstractJavaScriptComponent: Browser JavaScript-Caching verhindern

@JavaScript({"javaScriptConnector.js", "MyComp.js", "MyCompHtml.js"}) 
public class MyComp extends AbstractJavaScriptComponent { 
..... 
..... 
} 

Immer, wenn ich eine Änderung MyComp.js tun, muss ich meinen Browser-Cache löschen um die Änderung zu sehen. Das ist in Ordnung, wenn ich die App entwickle, aber ich kann meine Benutzer nicht bitten, den Cache zu löschen, sobald die App online ist.

Gibt es eine Möglichkeit, Browser-Caching von MyComp.js zu verhindern? Ich kenne den Trick, wo Sie eine Abfragezeichenfolge an das Javascript anhängen (zB: MyComp.js?v=1), aber ich habe keine Ahnung, wie ich das mit dem Vaadin AbstractJavaScriptComponent machen kann.

Antwort

3

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

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

Bitte DefaultDeploymentConfiguration.class in Bezug auf die Standardwerte sehen.

diesen Wert auf 0 Einstellung fügt die folgende Antwort-Header:

cache-control: public, max-age=0, must-revalidate

anweist Caches jedes Mal, diese Ressource erneut zu validieren.

com.vaadin.server.communication.PublishedFileHandler.handleRequest ist, wo die veröffentlichte Dateiantwort erstellt wird. Das Problem hierbei ist, dass es sich um eine globale Einstellung für alle veröffentlichten Ressourcen handelt. Daher besteht die einzige Möglichkeit zum Anpassen darin, den veröffentlichten Dateihandler zu erstellen.

Vielleicht würde Vaadin in Erwägung ziehen, der @ Javascript/@ StyleSheet-Annotation eine weitere Option hinzuzufügen, um eine spezifischere Ressourcen-Cache-Zeit zu erreichen.