Thymeleaf是一种用于在Web应用程序中渲染HTML模板的Java模板引擎。它允许开发人员通过模板中的表达式和标签将动态数据嵌入到HTML页面中。Thymeleaf的设计目标是使模板更易于阅读、可维护,并且与设计师和非开发人员协作更加容易。
一、Thymeleaf
<html xmlns:th="http://www.thymeleaf.org"> 这段 HTML 代码使用了 XML 命名空间(namespace)的概念,特别是 Thymeleaf 的命名空间,它通常用于 Thymeleaf 模板引擎中。
Thymeleaf 是一种用于服务器端模板渲染的 Java 模板引擎,它允许开发者将动态数据嵌入到 HTML 模板中。
上述代码中的 xmlns:th="http://www.thymeleaf.org" 定义了一个 XML 命名空间前缀 th,它与 Thymeleaf 相关联。
通过定义 Thymeleaf 命名空间,你可以在 HTML 中使用 Thymeleaf 的模板语法,以便在服务器端动态生成 HTML 内容。例如,你可以在 HTML 中使用 Thymeleaf 表达式来插入变量、循环遍历集合、执行条件判断等操作。 以下是一个简单的示例,演示了如何在 HTML 中使用 Thymeleaf 表达式:
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Thymeleaf Example</title>
</head>
<body>
<h1>Welcome, <span th:text="${user.name}">User</span>!</h1>
<ul>
<li th:each="item : ${items}" th:text="${item}"></li>
</ul>
</body>
</html>
在上面的示例中,th:text="${user.name}" 和 th:each="item : ${items}" 都是 Thymeleaf 表达式,用于在服务器端渲染时替换成实际的数据。这样,你可以动态地生成 HTML 内容,而不是静态的硬编码 HTML 页面。
二、使用 Thymeleaf时,需要在后端 Java 代码中执行的步骤
1、配置 Thymeleaf:
首先,确保你的项目已正确配置 Thymeleaf。这通常涉及到在你的项目中添加 Thymeleaf 依赖,并在配置文件中指定 Thymeleaf 的模板路径等配置信息。
// 示例 Spring Boot 配置
// 配置文件 application.properties 或 application.yml
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
2、创建控制器:
创建一个控制器类,该类将处理 HTTP 请求并准备要渲染的数据。在控制器中,你需要使用 Thymeleaf 的上下文对象来将数据传递到模板中。
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class MyController {
@GetMapping("/myPage")
public String myPage(Model model) {
// 准备数据
model.addAttribute("user", new User("John"));
model.addAttribute("items", Arrays.asList("Item 1", "Item 2", "Item 3"));
// 返回模板文件名
return "myPageTemplate"; // 这里的模板文件名应该对应你的实际文件名
}
}
3、创建 Thymeleaf 模板:
在项目的模板目录(根据配置通常是 templates/)中创建模板文件,文件名与控制器方法中返回的模板文件名相匹配(在上面的示例中是 "myPageTemplate")。在模板文件中使用 Thymeleaf 表达式来渲染数据。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>My Page</title>
</head>
<body>
<h1>Welcome, <span th:text="${user.name}">User</span>!</h1>
<ul>
<li th:each="item : ${items}" th:text="${item}">Item</li>
</ul>
</body>
</html>
4、返回模板名称:
控制器方法中的 return 语句应该返回模板文件的名称,而不是文件的实际路径。Thymeleaf 将根据配置的模板前缀和后缀来查找模板文件。
5、请求处理:
当用户访问 /myPage 路径时,控制器方法将会被调用,它将准备数据并返回模板的名称。Thymeleaf 将会根据模板名称查找并渲染模板,将数据插入到模板中,然后将渲染后的 HTML 响应发送给客户端。