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实现获取当前时间是本月第几周的方法

    获取当前日期是本月第几周可以使用JavaScript中Date对象中的一些方法来实现。下面是具体的实现方法以及示例说明: 获取当前时间 在JavaScript中通过创建一个Date对象来获取当前的时间,可以使用new关键字和Date构造函数来创建一个Date对象: const now = new Date(); 获取当前时间的月份以及日期 获取当前时间所在的…

    JavaScript 2023年5月27日
    00
  • JS简单添加元素新节点的方法示例

    下面我来详细讲解“JS简单添加元素新节点的方法示例”的完整攻略。 什么是添加新节点? 在 JavaScript 中,向 HTML 文档中添加节点(节点就是 HTML 元素)的过程称为添加新节点。 添加新节点的方法 使用 JavaScript 可以轻松地添加新节点到 HTML 页面中。下面我们来看看两个添加新节点的示例方法。 方法一:appendChild()…

    JavaScript 2023年6月10日
    00
  • JSP中js传递和解析URL参数以及中文转码和解码问题

    JSP是一种动态网页开发技术,它可以将Java代码嵌入到HTML页面中,从而实现页面的动态生成。在JSP中,我们经常需要通过js来传递和解析URL参数,而且在传递中文参数时需要进行转码和解码,本文将为大家详细介绍如何在JSP中处理URL参数和中文编码问题。 1. 获取URL参数 在JSP中获取URL参数非常简单,只需要使用内置对象request的getPar…

    JavaScript 2023年5月19日
    00
  • 全面兼容的javascript时间格式化函数(比较实用)

    全面兼容的javascript时间格式化函数(比较实用) 1. 功能介绍 本文将介绍如何编写一个全面兼容的 JavaScript 时间格式化函数。该函数可以将时间格式化为指定的字符串,并且兼容 IE 6 及以上的浏览器。 2. 编写步骤 2.1 定义函数 首先,我们需要定义一个函数来进行格式化。该函数的参数为需要格式化的时间和格式化字符串,返回值为格式化后的…

    JavaScript 2023年5月27日
    00
  • Javascript中this的用法详解

    下面开始详细讲解“JavaScript中this的用法详解”。 什么是this? 在JavaScript中,this是一个关键字,代表着函数执行的上下文环境。根据函数被调用的方式不同,this的值也会有所不同。 this的用法 1. 作为对象的方法被调用 当一个函数作为对象的方法被调用时,其中的this指向该对象。 const obj = { name: ‘…

    JavaScript 2023年5月28日
    00
  • JavaScript基础之AJAX简单的小demo

    当创建Web应用程序时,需要异步处理与服务器的交互。这就是为什么Ajax对于现代Web开发至关重要。在这个简单的AJAX小demo中,我们将通过一个实际的例子学习AJAX。 1. AJAX的基本知识 AJAX全称“异步JavaScript和XML”,是一种创建快速动态Web内容的技术。通过AJAX,Web应用程序可以在不重新加载页面的情况下向Web服务器发送…

    JavaScript 2023年5月28日
    00
  • JS和JQ的event对象区别分析

    JS和JQ都有一个event对象,但是它们的区别还是比较明显的。在这里我们来详细讲解一下。 1. JS的event对象 在JS中,事件触发时会自动生成一个event对象,并且通过addEventListener或者window.attachEvent绑定的函数,第一个参数都是event。event对象包含了一些事件的属性和方法,可以方便的获取事件的相关信息。…

    JavaScript 2023年6月10日
    00
  • VueJs单页应用实现微信网页授权及微信分享功能示例

    下面我来为你详细讲解“VueJs单页应用实现微信网页授权及微信分享功能示例”的完整攻略。 简介 微信网页授权和微信分享功能是开发微信公众号和小程序时常用的功能,本文将介绍如何在VueJS单页应用中实现这两个功能。 微信网页授权 在公众平台中注册一个微信公众号,并且在公众号设置中添加JS接口安全域名,否则无法使用微信JS-SDK功能。 在网页中引入微信JS-S…

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