我在胸腺叶模板中有一个main.js,每次我调用它时,我都想添加一个版本参数,这样它就不会被缓存,我的最新更改将生效.

    <script src="/main.js?version=345345456"></script>
</body>
</html>

因为它是所有其他模板背后的布局,所以我不想从控制器传递变量.

因此,我决定向我的应用程序类添加一个Bean方法

@SpringBootApplication
public class NexusApplication {

    @Bean
    public double jsVersion(){
        return Math.random();
    }

}

然后我加了一句:

<script th:src="@{/js/my-script.js(version=NexusApplication.jsVersion())}"></script>

输出为:

<script th:src="@{/main.js?(version=NexusApplication.jsVersion())}"></script>

我遗漏了什么?我应该如何更好地处理这个问题?

推荐答案

一种Java方法是使用您的方法生成一个随机值,如果您想要一个包含一定位数的整数,则可以看到How do I generate random integers within a specific range in Java?.

然后,您可以用通常的Spring方式将该值(我们称其为randNumber)添加到模板的模型中-例如:

model.addAttribute("randNumber", randNumber);

现在,您可以在Thymeleaf模板中使用以下内容:

<script th:src="@{/main.js(version=${randNumber})}"></script>

请注意,该变量需要是以${...}表示的Thymeleaf表达式.


一种可能可以接受的替代方法是对随机字母数字字符串使用Thymeleaf的表达式实用程序方法:

${#strings.randomAlphanumeric(count)}

例如,对于长度为5的字符串:

<script th:src="@{/main.js(version=${#strings.randomAlphanumeric(5)})}"></script>

为此,您不需要任何Java.

最终结果与第一种方法类似,但可以包含字符和数字:

<script src="/main.js?version=2Q931"></script>

Java相关问答推荐

Java加密/解密代码转换为PHP不起作用

在没有maven或IDE的情况下从命令行运行PFA模块化应用程序时出现神秘错误

长音符

Saxon 9:如何从Java扩展函数中的net.sf.saxon.expr. XPathContent中获取声明的变量

为什么接口中的主函数而不是类中的主函数在Java 17中编译和运行没有问题?

如何调用Firebase Realtime Database中的子图像列表到android studio中的回收器视图?

有没有一种方法使保持活动设置专用于java.net.http.HttpClient的一个实例

所有 case 一起输入时输出错误,而单独放置时输出正确

FALSE:它应该在什么时候使用?

当涉及到泛型时,类型推理在Java中是如何工作的?

如何在ApachePOI中将图像添加到工作表的页眉?

测试期间未执行开放重写方法

Java ArrayList的整数和数组的泛型

允许同时执行两个方法,但不能同时执行这两个方法

为什么没有加载java.se模块?

Java 21内置http客户端固定运营商线程

验证没有';t work on Hibernate Entity';s字段

设置背景时缺少Android编辑文本下划线

读取ConcurrentHashMap中的可变对象

原始和参数化之间的差异调用orElseGet时可选(供应商)