我在 thymeleaf 模板中有一个 main.js,每次调用它时我都想添加一个版本参数,这样它就不会被缓存,并且我的最新更改将起作用。
<script src="/main.js?version=345345456"></script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
由于它是所有其他模板后面的布局,因此我不想从控制器传递变量。
所以我决定向我的应用程序类添加一个bean方法
@SpringBootApplication
public class NexusApplication {
@Bean
public double jsVersion(){
return Math.random();
}
}
Run Code Online (Sandbox Code Playgroud)
比我补充的:
<script th:src="@{/js/my-script.js(version=NexusApplication.jsVersion())}"></script>
Run Code Online (Sandbox Code Playgroud)
输出是:
<script th:src="@{/main.js?(version=NexusApplication.jsVersion())}"></script>
Run Code Online (Sandbox Code Playgroud)
我缺少什么?我应该如何更好地处理这个问题?
一种 Java 方法是根据需要使用您的方法生成随机值,或者参见如何在 Java 中生成特定范围内的随机整数?,如果您想要一个具有一定位数的整数。
然后,您可以以通常的 Spring 方式将该值(我们称之为randNumber)添加到模板的模型中 - 例如:
model.addAttribute("randNumber", randNumber);
Run Code Online (Sandbox Code Playgroud)
现在您可以在 Thymeleaf 模板中使用以下内容:
<script th:src="@{/main.js(version=${randNumber})}"></script>
Run Code Online (Sandbox Code Playgroud)
请注意该变量如何需要是${...}.
另一种可能可以接受的替代方法是使用 Thymeleaf 的表达式实用方法来处理随机字母数字字符串:
${#strings.randomAlphanumeric(count)}
Run Code Online (Sandbox Code Playgroud)
例如,对于长度为 5 的字符串:
<script th:src="@{/main.js(version=${#strings.randomAlphanumeric(5)})}"></script>
Run Code Online (Sandbox Code Playgroud)
为此,您不需要任何 Java。
最终结果与第一种方法类似,但可以包含字符和数字:
<script src="/main.js?version=2Q931"></script>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
280 次 |
| 最近记录: |