Thymeleaf是Springboot官方推荐的模板引擎,但仅能渲染html xhtml这类型的格式,是实实在在的页面模板引擎。
开发过程中会遇到各种各样的需求,想要调用springboot上下文中bean的方法,thymeleaf使用@来调用bean方法:
<head>
<link rel="stylesheet"
th:href="@{/static/common/css/index.css(a=${@sysConst.getConst('dev') eq 'true' ? #dates.createNow().time : ''})}">
<link rel="stylesheet"
th:href="@{/static/common/css/im.css(a=${@sysConst.getConst('dev') eq 'true' ? #dates.createNow().time : ''})}">
</head>
<body>
<script th:src="@{/static/common/js/index.js(a=${@sysConst.getConst('dev') eq 'true' ? #dates.createNow().time : ''})}"></script>
<script th:src="@{/static/common/js/im.js(a=${@sysConst.getConst('dev') eq 'true' ? #dates.createNow().time : ''})}"></script>
</body>
这里我简单解释一下,我在所有业务上的css和js上的资源路径后缀加了一个时间戳的参数,在开发阶段保证了因浏览器缓存,带来的预览不及时等问题,因此我在常量中设置了参数dev,根据dev常量的参数来动态开启后缀。
浏览器开发者模式,效果如下:
image.png
常量方法很也普通
@Component
public class SysConst{
@Autowired
private ConstService constService;
/**
* 获取常量
* @param key
* @return
*/
public String getConst(String key) {
Const sysConst = this.constService.get(key);
if(Objects.nonNull(sysConst)){
return sysConst.getVal();
}
return null;
}
}
如上所示,thymeleaf @{}标签是资源标签,可以保证引用的资源开头都会加上contextPath,
thymeaf使用${}来表示变量,使用@跟上bean的名称就可以调用了,是不是很简单。