Thymeleaf

Thymeleaf是一个流行的Java服务器端模板引擎,可用于构建Web应用程序。它的设计理念是将模板和Java代码分离,使得开发人员能够更轻松地开发和维护Web应用程序。Thymeleaf的模板语法是HTML5兼容的,使得开发人员可以直接在模板中使用标准的HTML标签和属性。同时,它还支持常用的表达式语言,如Spring EL、OGNL、MVEL等。

以下是Thymeleaf的一些主要特点:

  • 自然的模板语法:模板语法清晰简洁,类似于自然语言,易于阅读和编写。

  • 支持多种模板类型:支持HTML,还支持XML、JavaScript、CSS等多种模板类型。

  • 强大的表达式语言:支持多种表达式语言,如Spring EL、OGNL、MVEL等,使得模板中的表达式更加强大和灵活。

  • 可扩展性:支持自定义标签和属性,使得开发人员能够扩展和定制模板语法,满足不同的需求。

  • 与Spring框架集成:是Spring框架的一部分,与Spring MVC、Spring Boot等框架集成得非常紧密,可以更方便地使用Spring的功能。

在spingboot项目中使用thymeleaf

  1. 添加依赖

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
  2. application.properties文件中配置相关属性

    # 模板文件的前缀和后缀
    spring.thymeleaf.prefix=classpath:/templates/
    spring.thymeleaf.suffix=.html
    # 开发模式下,关闭模板缓存
    spring.thymeleaf.cache=false
  3. 创建模板文件

    在src/main/resources/templates目录下创建模板文件,例如index.html。

    <!DOCTYPE html>
    <html xmlns:th="http://www.thymeleaf.org">
    <head>
        <title>Thymeleaf Example</title>
    </head>
    <body>
        <h1 th:text="${message}"></h1>
    </body>
    </html>
  4. 在Controller中使用Thymeleaf:在Controller中处理请求,将数据传递给模板,例如:

    @Controller
    public class HomeController {
    
        @GetMapping("/")
        public String index(Model model) {
            model.addAttribute("message", "Hello, Thymeleaf!");
            return "index";
        }
    }
  5. 访问 http://localhost:8080 可以看到 Hello, Thymeleaf!

常用的Thymeleaf语法

  1. 变量表达式:使用${}语法可以输出变量的值,例如:

    <h1 th:text="${title}">Default Title</h1>
  2. 选择器表达式:使用*{}语法可以选择一个对象的属性,例如:

    <div th:object="${user}">
        <p>Name: <span th:text="*{name}"></span></p>
        <p>Email: <span th:text="*{email}"></span></p>
    </div>
  3. 事件表达式:使用@{}语法可以生成URL或表单action,例如:

    <a th:href="@{/user/{id}(id=${userId})}">User Profile</a>
    <form th:action="@{/submitForm}" method="post">
  4. 迭代器表达式:使用th:each指令可以遍历集合,例如:

    <ul>
        <li th:each="item : ${items}" th:text="${item}"></li>
    </ul>
  5. 条件表达式:使用th:if、th:unless、th:switch等指令可以进行条件判断,例如:

    <p th:if="${isAuthenticated}">Welcome, ${username}!</p>
    <p th:unless="${isAuthenticated}">Please login to access this page.</p>
    <div th:switch="${dayOfWeek}">
        <p th:case="'MONDAY'">Today is Monday.</p>
        <p th:case="'TUESDAY'">Today is Tuesday.</p>
        <p th:case="'WEDNESDAY'">Today is Wednesday.</p>
        <p th:case="*">Today is some other day.</p>
    </div>
  6. 属性操作:使用th:attr指令可以设置HTML属性,例如:

    <input th:attr="data-id=${userId}" type="hidden" name="id" value="${userId}" />
    <a th:attrappend="href=${'#' + section}">Go to Section</a>
  7. 片段替换:使用th:replace、th:insert、th:include等指令可以在页面中插入片段,例如:

    <div th:replace="fragments/header :: logo"></div>
    <div th:insert="fragments/sidebar :: menu"></div>
    <div th:include="fragments/footer :: copyright"></div>