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日

相关文章

  • JS类的封装及实现代码

    JS类的封装是指通过将变量和操作封装在一个类中,来实现对变量及操作的保护和控制。类的封装可以提高代码的复用性,可读性和可维护性。 以下是JS类的封装及实现代码的步骤: 1. 设计类的结构 在设计类的结构时,需要考虑类的成员变量和方法,及它们的访问权限。 class MyClass { constructor(prop1, prop2) { this._pro…

    JavaScript 2023年6月10日
    00
  • 用js进行url编码后用php反解以及用php实现js的escape功能函数总结

    以下是使用 JavaScript 进行 URL 编码并在 PHP 中进行反解码的攻略: JS 中的 URL 编码 在 JavaScript 中,可以使用 encodeURIComponent() 函数来对 URL 进行编码。 举例来说,如果想将以下字符串进行编码: var str = "hello world"; 可以使用以下代码进行编码…

    JavaScript 2023年5月19日
    00
  • Visual Studio中js调试的方法图解

    下面我将详细地讲解“Visual Studio中js调试的方法图解”的完整攻略。 一、Visual Studio中js调试的方法图解 在 Visual Studio 中,开发者可以方便地对 JavaScript 代码进行调试,它提供了丰富的调试工具和应用程序接口。下面是使用 Visual Studio 进行 JavaScript 调试的步骤: 1. 打开一个…

    JavaScript 2023年6月11日
    00
  • 纯JS实现根据CSS的class选择DOM

    实现根据CSS的class选择DOM,可以使用document.getElementsByClassName()方法来完成。这个方法会返回所有符合指定class name的元素的一个类数组对象。但是需要注意的是,该方法在低版本的IE浏览器中不支持,所以最好搭配使用checkBrowser()函数,来进行浏览器兼容性的处理。 以下是完成该功能的具体步骤: 步骤…

    JavaScript 2023年6月10日
    00
  • ES6中的Promise对象与async和await方法详解

    ES6中的Promise对象与async和await方法详解 在ES6之前,JavaScript的异步编程需要使用回调函数,这种方式常常导致代码难以阅读和维护。ES6引入Promise对象和async/await方法,使得异步编程更加易于理解和控制。 Promise对象 Promise对象是ES6提供的一种异步编程的解决方案,是一个代表一个异步操作的最终结果…

    JavaScript 2023年5月28日
    00
  • JavaScript中Number对象的toFixed() 方法详解

    JavaScript中Number对象的toFixed() 方法详解 toFixed() 方法是JavaScript中Number对象的一个方法,可以将数字保留指定位数的小数。在本文中,我们将详细介绍这个方法的用法和示例,以便帮助读者更好地理解。 语法 toFixed() 方法的语法如下: number.toFixed([digits]) 其中,digits…

    JavaScript 2023年5月28日
    00
  • 原生JS实现逼真的图片3D旋转效果详解

    下面我将详细讲解“原生JS实现逼真的图片3D旋转效果”的完整攻略。 前言 图片3D旋转效果是一种常见的网页设计效果,可以使页面看起来更加生动、有趣,并且能够吸引用户的注意力。本文将通过一个完整的案例来教您如何使用原生JS实现逼真的图片3D旋转效果。 准备工作 在开始之前,我们需要先准备好一些必要的工具和素材:1. 一张需要进行3D旋转效果的图片2. HTML…

    JavaScript 2023年6月10日
    00
  • 详解Javascript中DOM的范围

    详解Javascript中DOM的范围 什么是DOM范围 在Javascript中,DOM(Document Object Model)是指用来描述HTML文档结构的树形结构模型。而DOM范围则是指在Javascript中,我们可以对DOM树进行操作的范围。 一个DOM范围由以下几个组成部分: 起始边界点(start boundary point):范围的开…

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