Thymeleaf
时间: 2025-05-22 22:45:24 浏览: 25
### Thymeleaf 的概述与基本使用
Thymeleaf 是一种现代服务器端 Java 模板引擎,适用于 Web 和独立环境下的 Java 应用开发[^1]。其核心设计理念之一是支持自然模板的概念,这意味着模板可以直接在浏览器中打开并正确渲染,从而方便前端设计师和后端开发者协同工作。
#### Thymeleaf 的主要特性
1. **HTML/XHTML/XML 支持**
Thymeleaf 能够处理 HTML、XHTML 和 XML 文档,这使其非常适合用于构建动态网页应用[^1]。
2. **静态原型兼容性**
开发者可以先制作静态页面作为原型,之后再通过 Thymeleaf 注解将其转化为动态内容。这种方式极大地提高了前后端协作效率。
3. **多种方言支持**
除了默认的标准方言外,还支持 Spring 标准方言以及其他扩展功能,增强了灵活性和可定制能力。
---
### Thymeleaf 的基础语法
以下是几个常用的 Thymeleaf 属性及其说明:
| 属性名 | 描述 |
|-------------------|----------------------------------------------------------------------|
| `th:text` | 设置标签内的文本内容 |
| `th:each` | 循环遍历集合 |
| `th:href` | 修改超链接地址 |
| `th:value` | 给 input 元素赋值 |
下面展示了一个简单的例子,演示如何利用 Thymeleaf 渲染用户列表数据[^2]:
```html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Users</title>
</head>
<body>
<h1>Users</h1>
<ul>
<!-- 使用 th:each 遍历 users 列表 -->
<li th:each="user : ${users}">
<span th:text="${user.name}">Name</span> -
<span th:text="${user.email}">Email</span>
</li>
</ul>
</body>
</html>
```
在这个示例中,`${users}` 表示从控制器传递过来的一个模型属性,通常是一个包含多个用户的集合对象。
---
### Thymeleaf 与 JPA 的集成
当 Thymeleaf 结合 JPA 使用时,可以轻松实现复杂的增删改查操作,并将结果显示到前端界面。以下是一个典型的案例分析[^3]。
#### 控制器逻辑
假设我们有一个用户管理系统,其中涉及到了分页查询的操作。下面是对应的 Controller 方法片段:
```java
@RequestMapping(value = "/list")
public String list(Model model, Long roleId, String usrName, Long pageIndex) {
// 获取角色列表
List<Role> roles = roleService.list();
// 初始化分页参数,默认第一页
pageIndex = (pageIndex == null) ? 1 : pageIndex;
// 创建分页对象并调用服务层获取分页后的用户数据
Page<User> userPager = new Page<>();
userPager.setCurrent(pageIndex);
userPager = userService.userPage(roleId, usrName, userPager);
// 将所需数据绑定至 Model 中以便传送到视图
model.addAttribute("roleId", roleId);
model.addAttribute("usrName", usrName);
model.addAttribute("roles", roles);
model.addAttribute("userPager", userPager);
return "user/list";
}
```
在此代码段中,`roleService.list()` 返回的是所有可用的角色列表;而 `userService.userPage(...)` 执行基于条件过滤的分页查询并将结果封装在一个分页对象里返回给前端显示。
#### 视图部分
对于上面提到的服务响应,我们可以这样设计我们的 Thymeleaf 页面结构来呈现这些信息:
```html
<table border="1">
<thead>
<tr>
<th>ID</th><th>Name</th><th>Email</th><th>Role</th>
</tr>
</thead>
<tbody>
<tr th:each="user : ${userPager.records}">
<td th:text="${user.id}"></td>
<td th:text="${user.name}"></td>
<td th:text="${user.email}"></td>
<td th:text="${user.role.name}"></td>
</tr>
</tbody>
</table>
<!-- 分页导航栏 -->
<div>
<a href="/list?page=1" th:href="@{/list(page=${userPager.firstPage})}">First</a>
...
<a href="#" th:if="${!userPager.isLast}"
th:href="@{/list(page=${userPager.nextPage})}">Next</a>
</div>
```
这里不仅展示了表格形式的数据列印,还包括了上下翻动页面的功能按钮生成。
---
### 总结
综上所述,Thymeleaf 提供了一套简洁高效的模板解决方案,尤其适合配合像 JPA 这样的后台技术栈共同打造全栈式的 Java Web 应用程序。无论是日常业务还是复杂场景下都能发挥重要作用。
阅读全文
相关推荐
















