springboot中thymeleaf模板使用详解

yizhihongxing

这里是 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日

相关文章

  • 跟我学习javascript创建对象(类)的8种方法

    跟我学习JavaScript创建对象(类)的8种方法 本文将详细讲解JavaScript中创建对象或类的8种方法,包括对象字面量、构造函数、原型链、Object.create()、工厂模式、Class语法、继承与混合等内容。 1. 对象字面量 对象字面量是一种创建对象的简单方法,通过直接在花括号内定义对象的属性和方法,以冒号作为键名和键值的分隔符。例如: l…

    JavaScript 2023年5月27日
    00
  • JS获取当前日期时间并定时刷新示例

    获取当前日期时间并定时刷新是一个常见的前端需求,可以通过JavaScript实现。下面将详细介绍如何实现这个功能并提供两条示例说明。 步骤一:获取当前日期时间 我们可以使用JavaScript中的Date对象来获取当前日期时间。可以使用Date类的方法getYear(),getMonth(),getDay(),getHours(),getMinutes()和…

    JavaScript 2023年5月27日
    00
  • JavaScript接口的实现三种方式(推荐)

    下面是关于“JavaScript接口的实现三种方式(推荐)”的详细攻略: 什么是JavaScript接口? JavaScript接口是指一种约定,它定义了一个或多个方法或属性,用于描述某个对象或类应该具备的行为和特征。JavaScript接口常用于实现对象的多态性和抽象性,从而增强代码的可扩展性和可维护性。 JavaScript接口的实现方式 下面介绍三种常…

    JavaScript 2023年5月27日
    00
  • 关于Javascript 对象(object)的prototype

    Javascript对象的prototype 在Javascript中对象是至关重要的部分,所有对象都是通过原型继承而来的。原型指的是任何Javascript对象都有一个指向原型的链接,可以通过该链接来访问原型对象的属性和方法。 为了更好的理解Javascript对象的prototype,需要首先了解Javascript中的几个重要概念: 原型链(proto…

    JavaScript 2023年5月27日
    00
  • javascript转换字符串为dom对象(字符串动态创建dom)

    当我们需要通过JS动态创建页面元素时,我们可以将HTML代码存储在字符串中,然后使用JavaScript中的一些操作将其转换为DOM对象。本文将详细介绍这个过程。 1. 使用innerHTML属性创建DOM对象 我们可以使用innerHTML属性将字符串转换为DOM对象。首先,我们需要选择一个已经存在的DOM元素,然后设置它的innerHTML属性为我们要动…

    JavaScript 2023年5月28日
    00
  • 一文看懂如何简单实现节流函数和防抖函数

    引言: 在前端开发中,我们常常需要处理一系列与用户交互相关的事件,如滚动、键盘输入、鼠标移动等等。这些事件会频繁触发,造成过多的资源浪费,因此需要使用节流和防抖函数来解决这个问题。本文将详细讲解如何实现节流和防抖函数。 一、什么是节流函数和防抖函数? 节流函数:在一段时间内,只执行一次函数。比如,一个页面上有多个滚动事件,如果每一次滚动都触发事件处理函数,可…

    JavaScript 2023年6月11日
    00
  • 详解JavaScript 事件流

    请听我详细讲解“详解JavaScript 事件流”的完整攻略。 什么是JavaScript事件流 JavaScript事件流指的是介绍HTML中事件触发的顺序。HTML通常是从外部开始的,并从外部向下(冒泡阶段)移动到最下方元素,然后在内部从下到上执行(捕获阶段)。事件以冒泡的形式进行,这意味着在激活事件后,事件将从内部向外冒泡。例如,如果你点击一个按钮,事…

    JavaScript 2023年6月10日
    00
  • JavaScript适配器模式原理与用法实例详解

    JavaScript适配器模式原理与用法实例详解 适配器模式基本概念 适配器模式是一种结构型设计模式,在现实生活中也经常出现。例如旅游适配器,通过把不同国家的电源插头转换成自己国家的电源插头来实现电器的兼容。 在JavaScript中,适配器模式的应用场景也很广泛,主要用于处理一些不兼容的接口或函数调用,,只要是两个或多个对象之间接口不兼容的情况都可以使用适…

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