SpringBoot系统搭建集成-010-整合Thymeleaf

mac2024-03-24  27

Lison <cundream@163.com>, v1.0.0, 2019.10.13

SpringBoot系统搭建集成-010-整合Thymeleaf

Thymeleaf 是新一代 Java 模板引擎,它类似于 Velocity、FreeMarker 等传统 Java 模板引擎,但是与传统 Java 模板引擎不同的是,Thymeleaf 支持 HTML 原型。

它既可以让前端工程师在浏览器中直接打开查看样式,也可以让后端工程师结合真实数据查看显示效果,同时,SpringBoot 提供了 Thymeleaf 自动化配置解决方案,因此在 SpringBoot 中使用 Thymeleaf 非常方便。

事实上, Thymeleaf 除了展示基本的 HTML ,进行页面渲染之外,也可以作为一个 HTML 片段进行渲染,例如我们在做邮件发送时,可以使用 Thymeleaf 作为邮件发送模板。

另外,由于 Thymeleaf 模板后缀为 .html,可以直接被浏览器打开,因此,预览时非常方便

整合

在pom.xml加入

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>

当然,Thymeleaf 不仅仅能在 Spring Boot 中使用,也可以使用在其他地方,只不过 Spring Boot 针对 Thymeleaf 提供了一整套的自动化配置方案,这一套配置类的属性在

org.springframework.boot.autoconfigure.thymeleaf.ThymeleafProperties 中,部分源码如下

首先通过 @ConfigurationProperties 注解,将application.properties前缀为 spring.thymeleaf的配置和这个类绑定前三个static 变量定义了默认的编码格式、视图解析器的前缀、后缀等。从前三行配置中,可以看出来,Thymeleaf 模板的默认位置在resources/templates目录下,默认的前缀是html这些配置,如果开发者不自己提供,则使用默认的,如果自己提供,则在application.properties中以spring.thymeleaf开始配置相关的配置

而我Spring Boot 为 Thymeleaf 提供的自动化配置类,则是 org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration ,部分源码如下:

在这个自动化配置类中,首先导入 ThymeleafProperties ,然后 @ConditionalOnClass 注解表示当当前系统中存在 TemplateMode 和 SpringTemplateEngine 类时,当前的自动化配置类才会生效,即只要项目中引入了 Thymeleaf 相关的依赖,这个配置就会生效

这些默认的配置我们几乎不需要做任何更改就可以直接使用了。如果开发者有特殊需求,则可以在 application.properties 中配置以 spring.thymeleaf 开头的属性即可

创建Controller

接下来我们就可以创建 Controller 了,实际上引入 Thymeleaf 依赖之后,我们可以不做任何配置。新建的 ThymeleafController 如下

@Controller @RequestMapping("/thymeleaf") @Api(value = "ThymeleafController", tags = "thymeleaf", description = "Thymeleaf测试接口") public class ThymeleafController { @Autowired private UserService userService; @RequestMapping(value = "/userList",method = RequestMethod.GET) public String userList(Model model){ model.addAttribute("users", userService.getUserById()); return "userList"; } }

另外,Thymeleaf 支持在 js 中直接获取 Model 中的变量。例如,在 ThymeleafController中有一个变量 thymeleafName:

~~

model.addAttribute("thymeleafName", "thymeleafName ----6666666");

在页面模板中,可以直接在 js 中获取到这个变量:

<script th:inline="javascript"> var thymeleafName = [[${thymeleafName}]]; console.log(thymeleafName) </script>

项目GitHub地址

最新回复(0)