2013-08-22 151 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})}