这里是 SpringBoot 中 Thymeleaf 模板使用详解的完整攻略:
什么是Thymeleaf
Thymeleaf 是一种现代化的服务器端 Java 模板引擎,可以与 Spring Boot 集成使用,支持 HTML、XML、JavaScript、CSS 甚至纯文本。模板文件可以使用包含表达式的标记替换,可以非常方便的将模型数据绑定到 HTML UI 中。
如何使用Thymeleaf
首先,需要在 Spring Boot 项目中添加相关的依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
<version>2.4.0</version>
</dependency>
在项目中添加 Thymeleaf 模板文件,通常存放在 classpath:/templates/ 目录下。例如,可以创建一个名为 index.html 的模板文件,包含如下内容:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org"
lang="en">
<head>
<title>Thymeleaf Demo</title>
</head>
<body>
<h1 th:text="${title}"></h1>
<div th:text="${message}"></div>
</body>
</html>
在上面的示例中,我们使用 Thymeleaf 的语法将 ${title} 和 ${message} 替换成了对应的模型数据。
将模板文件渲染成 HTML 网页,需要在 Spring Boot 中添加控制器,例如:
@Controller
public class ThymeleafController {
@GetMapping("/")
public String index(Model model) {
model.addAttribute("title", "Thymeleaf Demo");
model.addAttribute("message", "Hello, Thymeleaf!");
return "index";
}
}
上面的示例通过访问 http://localhost:8080/ 将 index.html 渲染成 HTML 网页,并将模型数据绑定到了对应的位置。
Thymeleaf常见语法
Thymeleaf 支持很多种常见的语法,包括表达式、条件判断、循环、URL 生成等,下面简单介绍一下。
表达式
可以使用表达式将模型数据绑定到 HTML 中。使用 ${} 将表达式括起来,例如:
<h1 th:text="${title}"></h1>
Thymeleaf 支持的表达式包括:
- ${...} 为变量表达式
- *{...} 为选择表达式
-
{...} 为消息表达式
- @{...} 为URL表达式
- ~{...} 为片段表达式
条件判断
可以使用 if、unless 实现条件判断。例如:
<div th:if="${user.isAdmin()}">
<p>Hi admin!</p>
</div>
<div th:unless="${user.isAdmin()}">
<p>Hi user!</p>
</div>
循环
可以使用 th:each 实现循环,例如:
<div th:each="item : ${items}">
<p th:text="${item.name}"></p>
<p th:text="${item.price}"></p>
</div>
URL 生成
可以使用 @{...} 生成 URL,例如:
<a th:href="@{/products/{id}(id=${product.id})}">Product Details</a>
示例说明
示例1:循环生成列表
下面的示例演示了如何使用 Thymeleaf 循环生成一个商品列表,其中包含了商品名和价格。首先,定义一个 Product 类:
public class Product {
private Long id;
private String name;
private BigDecimal price;
// getters and setters
}
然后,定义一个包含若干 Product 对象的列表:
@Controller
public class ProductController {
@GetMapping("/products")
public String list(Model model) {
List<Product> products = new ArrayList<>();
products.add(new Product(1L, "Product 1", new BigDecimal("10")));
products.add(new Product(2L, "Product 2", new BigDecimal("20")));
products.add(new Product(3L, "Product 3", new BigDecimal("30")));
model.addAttribute("products", products);
return "products";
}
}
最后,创建一个 Thymeleaf 模板文件,例如 products.html,包含如下内容:
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Product List</title>
</head>
<body>
<h1>Product List</h1>
<table>
<thead>
<tr>
<th>Name</th>
<th>Price</th>
</tr>
</thead>
<tbody>
<tr th:each="product : ${products}">
<td th:text="${product.name}" />
<td th:text="${product.price}" />
</tr>
</tbody>
</table>
</body>
</html>
在浏览器中访问 http://localhost:8080/products 即可看到生成的商品列表。
示例2:根据条件显示不同的页面
下面的示例演示了如何根据一个条件值来显示不同的页面。首先,定义一个 Contoller 类:
@Controller
public class MyController {
@GetMapping("/page")
public String page(Model model) {
model.addAttribute("isAdmin", true);
return "page";
}
}
然后,创建两个 Thymeleaf 模板文件,分别是 page.html 和 admin.html,分别包含如下内容:
page.html:
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Page</title>
</head>
<body>
<div th:if="${isAdmin}">
<p>Welcome, administrator!</p>
<a th:href="@{/admin}">Go to admin page</a>
</div>
<div th:unless="${isAdmin}">
<p>Welcome, user!</p>
</div>
</body>
</html>
admin.html:
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Admin Page</title>
</head>
<body>
<h1>Admin Page</h1>
<p>This page is only visible to administrators.</p>
</body>
</html>
在浏览器中访问 http://localhost:8080/page 即可看到根据 isAdmin 的值来显示不同的页面:管理员将看到包含 admin.html 页面的链接,用户将看到欢迎消息。管理员点击链接后将跳转到 admin.html 页面。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springboot中thymeleaf模板使用详解 - Python技术站