Vaadin AbstractJavaScriptComponent:阻止浏览器 javascript 缓存

Vaadin AbstractJavaScriptComponent: prevent browser javascript caching

我的 vaadin 应用程序中有一个自定义 javascript 组件,它扩展了 AbstractJavaScriptComponent.

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

每当我对 MyComp.js 进行更改时,我都需要清除浏览器缓存才能看到更改。这在我开发应用程序时没问题,但我不能在应用程序上线后要求我的用户清除缓存。

有没有办法阻止 MyComp.js 的浏览器缓存?我知道将查询字符串附加到 javascript 的技巧(例如:MyComp.js?v=1),但我不知道如何对 vaadin AbstractJavaScriptComponent.[=17 执行此操作=]

我通过使用 Vaadin servlet 配置的 resourceCacheTime 参数克服了这个问题:

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

有关默认值,请参阅 DefaultDeploymentConfiguration.class

将此值设置为 0 添加以下响应 header:

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

指示缓存每次都重新验证此资源。

com.vaadin.server.communication.PublishedFileHandler.handleRequest 是创建已发布文件响应的位置。这里的问题是这是所有已发布资源的全局设置,因此自定义它的唯一方法是创建您的已发布文件处理程序。

也许Vaadin会考虑在@Javascript/@StyleSheet注解中添加另一个选项来实现更具体的资源缓存时间。