Thymeleaf调用Springboot bean的方法

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的名称就可以调用了,是不是很简单。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。