Thymeleaf模板引擎使用总结

在Spring Boot Web项目中,Thymeleaf是一种常用的模板引擎,它能够将服务器端的数据与HTML模板结合,生成动态网页。Thymeleaf的主要优势在于它能够在浏览器中直接查看模板效果,同时也能与Spring MVC完美集成。

首先,我们需要在项目中添加Thymeleaf的依赖。在pom.xml中添加以下依赖:<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>添加依赖后,Spring Boot会自动配置Thymeleaf,默认情况下,Thymeleaf模板文件位于src/main/resources/templates目录下。

Thymeleaf使用特定的标签属性来处理动态内容,这些属性以`th:`开头。以下是一个简单的Thymeleaf模板示例:<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Home Page</title>
</head>
<body>
    <h1>Welcome, <span th:text="${user.name}">Guest</span>!</h1>
    
    <h2>User List</h2>
    <table>
        <tr>
            <th>ID</th>
            <th>Name</th>
            <th>Email</th>
        </tr>
        <tr th:each="user : ${users}">
            <td th:text="${user.id}">1</td>
            <td th:text="${user.name}">John Doe</td>
            <td th:text="${user.email}">john@example.com</td>
        </tr>
    </table>
    
    <a th:href="@{/logout}">Logout</a>
</body>
</html>在这个模板中,我们使用了以下Thymeleaf特性:
- `th:text`:替换标签内的文本内容
- `th:each`:循环遍历集合
- `th:href`:处理URL链接

接下来,我们需要创建一个控制器来处理请求并传递数据到模板。以下是一个简单的控制器示例:package com.example.demo.controller;

import com.example.demo.entity.User;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

import java.util.List;

@Controller
public class HomeController {

    @Autowired
    private UserService userService;

    @GetMapping("/")
    public String home(Model model) {
        Authentication auth = SecurityContextHolder.getContext().getAuthentication();
        String email = auth.getName();
        User currentUser = userService.findByEmail(email);
        model.addAttribute("user", currentUser);
        
        List<User> users = userService.getAllUsers();
        model.addAttribute("users", users);
        
        return "home";
    }
}在这个控制器中,我们获取当前登录用户的信息,并将其传递到模板中。同时,我们还获取了所有用户的列表,并将其也传递到模板中。

Thymeleaf还支持条件判断、表达式计算等功能。以下是一些常用的Thymeleaf表达式:
- `${...}`:变量表达式,用于获取上下文中的变量
- `*{...}`:选择变量表达式,用于获取选中对象的属性
- `#{...}`:消息表达式,用于国际化
- `@{...}`:URL表达式,用于生成URL
- `~{...}`:片段表达式,用于模板片段

例如,我们可以使用条件判断来显示不同的内容:<div th:if="${user.role == 'ADMIN'}">
    <p>You have administrator privileges.</p>
</div>
<div th:unless="${user.role == 'ADMIN'}">
    <p>You have standard user privileges.</p>
</div>
Thymeleaf还支持模板布局,可以将公共的页面元素提取到一个布局模板中,然后在其他模板中引用。以下是一个简单的布局示例:<!-- layouts/default.html -->
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title th:text="${title}">Default Title</title>
    <meta charset="UTF-8" />
    <link rel="stylesheet" type="text/css" href="/css/style.css" />
</head>
<body>
    <header>
        <h1>My Application</h1>
        <nav>
            <a th:href="@{/}">Home</a>
            <a th:href="@{/users}">Users</a>
            <a th:href="@{/logout}">Logout</a>
        </nav>
    </header>
    
    <main th:insert="${content} :: content"></main>
    
    <footer>
        <p>&copy; 2023 My Application</p>
    </footer>
</body>
</html>
然后在其他模板中可以这样引用:<!-- home.html -->
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" th:replace="layouts/default :: layout(title='Home Page')">
<body>
    <section th:fragment="content">
        <h1>Welcome to the Home Page</h1>
        <p>Hello, <span th:text="${user.name}">Guest</span>!</p>
    </section>
</body>
</html>
Thymeleaf还支持表单处理。以下是一个简单的表单示例:<form th:action="@{/users/save}" th:object="${user}" method="post">
    <input type="hidden" th:field="*{id}" />
    <div>
        <label>Name: <input type="text" th:field="*{name}" /></label>
    </div>
    <div>
        <label>Email: <input type="email" th:field="*{email}" /></label>
    </div>
    <div>
        <input type="submit" value="Save" />
    </div>
</form>
对应的控制器方法:@PostMapping("/users/save")
public String saveUser(@ModelAttribute("user") User user) {
    userService.saveUser(user);
    return "redirect:/users";
}
Thymeleaf是一个功能强大且易于使用的模板引擎,它与Spring Boot的集成非常简单。通过合理使用Thymeleaf的各种特性,我们可以高效地开发出动态、美观的Web页面,同时保持代码的可维护性和可测试性。
posted @ 2025-05-26 22:45  霸王鸡  阅读(12)  评论(0)    收藏  举报