2013-08-22 150 views
4

我遇到了一个问题,当我发布包含静态资源(图像,CSS文件,JavaScript库)更改的更新时,用户遇到错误的SpringMVC/Thymeleaf应用程序出现问题。发生这个问题是因为他们的浏览器缓存中有一个旧版本的资源,所以如果他们进行强制刷新,问题就会消失,但大多数用户不知道要这样做。Spring MVC + Thymeleaf:更新静态资源

过去,我已经在其他框架中解决了这个问题,让我的构建将构建号注入Spring bean并自定义URL构建机制,以将构建号包含在URL中。将这一点与在这些资源上将缓存控制响应头设置为遥远未来的日期相结合,可以确保只要用户在其浏览器缓存中拥有资源,除非我释放新构建,否则永远不会重新获取它。

Spring MVC/Thymeleaf是否有解决此问题的内置方法?如果不是,我该如何重写Thymeleaf中的URL写入机制,以便添加上面描述的行为?

回答

2

一个解决方案可以是编写自己的方言并定义一个自己的帮手sr。然后你可以写@{#sr(yoururl)}。你可以找到关于编写你自己的dialect的信息。

“作为创建您自己的效用的对象,可以通过创建一个简单的方言实现IExpressionEnhancingDialect接口来完成。这将使Thymeleaf添加你实现getAdditionalExpressionObjects()方法来处理上下文返回的任何对象。 “

在方言中,您可以定义buildnr硬编码。

另一种方法是将buildnr始终添加到模型中,然后您可以编写@{yoururl(buildnr=${buildnr})}

或者更好的是你把它放入消息源并可以使用@{yoururl(buildnr=#{buildnr})}