spring:Springboot3使用模版引擎thymeleaf

devtools/2024/10/15 17:42:55/

文章目录

    • 介绍
    • 语法
      • 1、文本替换
      • 2、属性替换
      • 3、条件判断
      • 4. 列表循环
      • 5. 表单处理
    • 基本示例
    • 视图解析机制
    • 视图解析器的默认配置
    • 为什么用@Controller可以,用@RestController就只是返回字符串

介绍

Thymeleaf 是一个现代的服务器端 Java 模板引擎,用于在服务器端生成 HTML、XML、JavaScript、CSS 等文件。它常用于构建动态网页应用,尤其是与 Spring Boot 集成时,Thymeleaf 提供了一种简洁且易于使用的模板渲染方式。它可以帮助开发者将数据与视图相结合,并生成动态内容。

语法

1、文本替换

使用 th:text 替换 HTML 元素中的文本内容:

<p th:text="${message}">This is a default message</p>

2、属性替换

可以使用 th:href, th:src, th:alt 等替换 HTML 标签的属性值:

<a th:href="@{/home}">Home</a>
<img th:src="@{/images/logo.png}" alt="Logo">

3、条件判断

使用 th:ifth:unless 来根据条件判断渲染内容:

<p th:if="${user != null}">Welcome, <span th:text="${user.name}">User</span>!</p>
<p th:unless="${user != null}">Please sign in.</p>

4. 列表循环

<ul><li th:each="item : ${items}" th:text="${item}">Item</li>
</ul>

5. 表单处理

th:field 用于将表单输入字段绑定到模型属性。

<form th:action="@{/submit}" th:object="${user}" method="post"><input type="text" th:field="*{name}" /><input type="password" th:field="*{password}" /><button type="submit">Submit</button>
</form>

基本示例

1、引入依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

2、添加控制器

java">package com.zhangyu.controller;import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
// 注意这里一定要使用@Controller,用@RestController不行,具体原因下面会说
@Controller
public class HelloController {@GetMapping("/hello")public String hello(Model model) {model.addAttribute("message", "Hello, Spring Boot 3 with Thymeleaf!");return "hello";}
}

3、创建 Thymeleaf 模板
在 src/main/resources/templates/ 目录下创建一个 hello.html 文件:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>Thymeleaf Example</title>
</head>
<body><h1>Thymeleaf Template</h1><p th:text="'Message: ' + ${message}"></p>
</body>
</html>

此模板通过 Thymeleaf 展示控制器传递过来的 message 变量。

http://localhost:8080/hello
在这里插入图片描述

视图解析机制

在 Spring Boot 和 Thymeleaf 中,当控制器返回一个字符串(如 index),Spring Boot 会自动将这个字符串映射为视图模板(即 HTML 文件)的名称 index.html,并将其渲染为响应。

这是通过 Spring MVC 和 Thymeleaf 的整合机制实现的。

视图解析器的默认配置

  • 模板路径:src/main/resources/templates/
  • 模板后缀:.html

这意味着当你返回 index 作为视图名称时,Spring Boot 会将其解析为路径 src/main/resources/templates/index.html

如果你想修改这个默认路径或文件后缀,可以在 application.properties 中进行配置:

spring.thymeleaf.prefix=classpath:/custom_templates/   # 修改模板路径
spring.thymeleaf.suffix=.htm                           # 修改模板后缀

这样,当你返回 index 时,Spring Boot 将会寻找 src/main/resources/custom_templates/index.htm

为什么用@Controller可以,用@RestController就只是返回字符串

在 Spring MVC 中,@Controller 和 @RestController 有不同的作用和行为:

  • @Controller:用于定义一个常规的 Spring MVC 控制器,它会返回一个视图名称(如 index),并由视图解析器解析为页面模板。
  • @RestController:实际上是 @Controller 和 @ResponseBody 的组合,它的作用是让控制器中的每个方法都直接将返回值作为 HTTP 响应的主体返回,而不是视图名称。它不会经过视图解析器,因此不会解析为 Thymeleaf 等模板引擎的视图文件。

http://www.ppmy.cn/devtools/126273.html

相关文章

优化神经网络的计算密集度

在神经网络模型设计和优化过程中&#xff0c;计算密集度低的模型容易导致 GPU 或其他硬件资源的利用率低下&#xff0c;从而影响训练和推理效率。为了解决这一问题&#xff0c;我们可以从多个角度入手&#xff0c;提升计算密集度&#xff0c;最大化硬件利用率。本文将总结如何优…

天通智能平板|智能移动终端|三防|单兵|平板|智能三防手持终端

全星魅科技推出的这款5G天通智能机是属于行业高端配置机型&#xff0c;CPU八核2G&#xff0c;内存8G128G&#xff0c;应急通信流畅操作不卡顿&#xff1b;电池15200毫安时超强续航&#xff08;是其他常规机子的2倍&#xff09;&#xff1b;屏幕坚如磐石&#xff0c;抗压抗摔&am…

Qt运行报错QWidget: Must construct a QApplication before a QWidget

报错文件为widget.cpp,原代码如下&#xff1a; #include <memory>QLineEdit *frequency new QLineEdit();QComboBox *cbBox_method new QComboBox();QLineEdit *X_MAXvalue new QLineEdit();QLineEdit *Y_MAXvalue new QLineEdit();QLineEdit *X_MINvalue…

Linux块设备驱动实验

直接参考【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.81 本文仅作为个人笔记使用&#xff0c;方便进一步记录自己的实践总结。 前面我们都是在学习字符设备驱动&#xff0c;本章我们来学习一下块设备驱动框架&#xff0c;块设备驱动是Linux 三大驱动类型之一。块设备驱动要远…

【MySQL_JDBC】Day23-Day28 数据库基础、JDBC基础、聊天室3.0

数据库 数据库基本概念 数据库DataBase 定义: 保存数据的仓库就称为数据库 例如 编写一个用户管理系统&#xff0c;可以让用户在我们编写的系统上进行注册等操作&#xff0c;此时就涉及到了保存用户数据的操作&#xff0c;目前我们的做法可以将一个用户信息以一个User对象…

论文翻译 | LARGE LANGUAGE MODELS ARE HUMAN-LEVELPROMPT ENGINEERS

摘要 通过在自然语言指令上进行调节&#xff0c;大型语言模型&#xff08;LLMs&#xff09;已经展现出了作为通用计算机的惊人能力。然而&#xff0c;任务表现很大程度上取决于用于引导模型提示的质量&#xff0c;而最有效的提示通常是由人工精心设计的。受到经典程序合成和人类…

将 QT 应用程序打包成如意玲珑软件包

在上一篇文章《国产系统之如意玲珑》中&#xff0c;我为大家介绍了一款创新的国产软件包管理工具——如意玲珑&#xff08;Linyaps&#xff09;。该工具集致力于解决 Linux 系统下传统软件包格式带来的复杂性和依赖问题&#xff0c;提供了一种更独立、更简洁的打包和管理方式。…

一文详解数据库范式

背景 在开发中&#xff0c;我们经常需要考虑如何设计合适的表结构&#xff0c;而则往往需要考虑数据库的范式。数据库的三范式&#xff08;3NF&#xff09;是数据库设计过程中用来减少数据冗余和提高数据一致性的重要规则。它们分别是第一范式&#xff08;1NF&#xff09;、第二…