springboot中thymeleaf模板使用详解

这里是 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技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • 通过jQuery源码学习javascript(三)

    作为网站的作者,我很乐意为大家详细讲解“通过jQuery源码学习javascript(三)”的完整攻略。 攻略概述 这篇攻略主要是介绍如何通过学习jQuery源码来提高JavaScript编程水平,以及一些常用的技巧和方法。 具体来说,攻略的内容涵盖以下几个方面: 探究jQuery源码中的一些关键概念,例如:DOM操作、事件冒泡、事件委托等。 学习如何为jQ…

    JavaScript 2023年5月18日
    00
  • ES6知识点整理之函数数组参数的默认值及其解构应用示例

    ES6知识点整理之函数数组参数的默认值及其解构应用示例 函数参数的默认值 在ES6之前,函数的参数如果没有传入值,则默认为undefined。 function func(a, b) { console.log(a, b); } func(1) //输出:1 undefined 在ES6中,函数的参数可以设置默认值,当没有传入该参数时,将使用设定的默认值。默…

    JavaScript 2023年5月28日
    00
  • JavaScript日期类型的一些用法介绍

    JavaScript日期类型的一些用法介绍 Date类型的创建 Date类型可以使用new操作符创建,也可以使用字符串形式创建。以下是这两种方式分别的示例: // 使用new操作符创建Date实例 const now = new Date(); console.log(now); // 输出当前时间 // 使用字符串形式创建Date实例 const some…

    JavaScript 2023年5月27日
    00
  • js动态创建及移除div的方法

    接下来我将为您详细讲解“JS动态创建及移除div的方法”的完整攻略。 创建Div元素 在JS中,我们可以通过createElement()方法来创建一个新的HTML元素,这也包括Div元素。下面是一个JS创建Div元素的示例。 // 创建一个Div元素 var divElement = document.createElement("div&quo…

    JavaScript 2023年6月10日
    00
  • 用js读写cookie的简单方法(推荐)

    以下是详细讲解“用js读写cookie的简单方法(推荐)”的完整攻略: 1. 什么是cookie 1.1 定义 cookie 是一种在客户端存储数据的小文件。在 HTTP 协议中,Web 服务器可以向客户端发送一个 Set-Cookie 的响应头,来告诉客户端保存这个 cookie。之后客户端每次请求响应都会带上这个 cookie,用来告诉服务器用户是谁。 …

    JavaScript 2023年6月11日
    00
  • bootstrap 表单验证使用方法

    为了详细讲解 Bootstrap 表单验证的使用方法,我们需要从以下几个方面来介绍: 引入 Bootstrap 表单验证相关的文件 理解 Bootstrap 表单验证的基本结构 使用 Bootstrap 表单验证的相关属性和方法 示例说明 1.引入 Bootstrap 表单验证相关的文件 首先,我们需要引入 Bootstrap 框架及其相关依赖文件,包括jQ…

    JavaScript 2023年6月10日
    00
  • JavaScript async/await使用详解

    JavaScript async/await使用详解 什么是async/await async/await是ES2017中的语法,它使得异步的代码看起来更像同步的代码。async/await基于Promise,是Promise写法的一种简洁写法。 使用async/await async/await需要使用async定义异步函数,使用await等待异步操作完成…

    JavaScript 2023年5月28日
    00
  • JS使用Promise时常见的5个错误总结

    JS使用Promise时常见的5个错误总结 Promise 是 JavaScript 异步编程的重要组成部分,它可以帮助我们更好地处理回调地狱问题,提高代码的可读性和可维护性。但是,在使用 Promise 进行编程时,可能会犯一些常见的错误。本文将总结 Promise 的5个常见错误,以及如何避免这些错误。 1. 没有正确处理 Promise 的错误 在编写…

    JavaScript 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部