spring:Springboot3使用模版引擎thymeleaf

news2024/10/22 21:31:53

文章目录

    • 介绍
    • 语法
      • 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、添加控制器

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.coloradmin.cn/o/2213496.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

掌握这几款在线音频剪辑工具,轻松成为音频处理达人!

在数字时代&#xff0c;音频剪辑已经成为一项必备技能。无论是制作短视频、播客&#xff0c;还是进行音乐创作&#xff0c;一款好用的音频剪辑工具都能助你事半功倍。今天&#xff0c;我们就来为大家推荐几款实用的在线音频剪辑工具&#xff0c;让你轻松成为音频处理达人&#…

救命!后悔没早点读,自学Python,这本书永远的神,经典又好懂!

这是一本对新手来说很友好的入门书&#xff0c;这本是今年才出的新版&#xff0c;之前的两个版本在某瓣都是9分以上了。专为初学者设计&#xff0c;同时也适合有编程经验的读者。该书由Eric Matthes编写&#xff0c;内容涵盖Python基础语法、编程概念以及丰富的实践项目。 全书…

【工具变量】文明城市评选DID(2000-2023年)

数据简介&#xff1a; 随着城市化的不断推进和全球城际竞争的日益激烈&#xff0c;城市品牌成为争夺优质资源、推动城市可持续发展的重要战略工具。通过关注城市品牌建设&#xff0c;不仅可以刺激本地企业家更多地进行创新活动&#xff0c;为企业家创新活动提供更好的营商环境…

自回溯天线:实现波束自动跟踪的智能天线系统

自回溯天线:实现波束自动跟踪的智能天线系统 1. 引言 自回溯天线是一种能够自动将接收到的信号发射回信号源方向的智能天线系统。它基于相位共轭原理,无需复杂的信号处理和控制系统,就能实现波束的自动跟踪。 自回溯天线技术依靠纯模拟方式实现&#xff0c;通过共轭模块对入射…

vue3中如何更改当前类的文件名称

首先&#xff0c;使用script指定文件名称 <template><div class"person"><h2>姓名&#xff1a;{{ name }}</h2><h2>年龄&#xff1a;{{ age }}</h2><button click"showTel">查看联系方式</button><bu…

【含文档】基于Springboot+Vue的招投标管理系统(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定…

如何恢复误删除的照片?能恢复多少?

最近在旅行时不小心删除了相机里之前拍摄的照片&#xff0c;我尝试在相机上恢复&#xff0c;但是没有找到恢复选项。我还能恢复这些照片吗&#xff1f;求助&#xff01; 一、照片恢复的可能性 照片恢复的可能性取决于多个因素&#xff0c;包括数据是否被覆盖、存储介质的类型、…

C语言笔记 10

求前n项之和 程序设计 f(n)1… 起点终点数字已知&#xff0c;用for循环最合适 #include <stdio.h>int main() {int n;int i;double sum 0.0;scanf("%d", &n);for ( i1; i<n; i ) {sum 1.0/i;}pritnf("f(%d)%f\n", n, sum);return 0; } i…

宿舍离人自动断电控制系统的功能要求是什么?

宿舍离人自动断电系统&#xff0c;由石家庄光大远通电气有限公司匠心打造&#xff0c;专为集体公寓、学生宿舍等密集型居住空间量身定制的智能用电管理解决方案&#xff0c;其卓越性能与广泛适应性&#xff0c;如同智慧之网&#xff0c;精准覆盖并优化每一份用电需求。该系统不…

八卦GPT-5的一切

这篇超长文章——既是评论&#xff0c;也是探索——关于GPT-5 对最受期待的下一代 AI 模型的深入分析 但它不仅仅是关于GPT-5。 • 它涉及我们对下一代AI模型的期望。 • 它关于即将出现的令人兴奋的新功能&#xff08;如推理和代理&#xff09;。它不仅讨论GPT-5技术本身&…

人工智能领域科学问题

科学问题 目前中国在人工智能领域亟待解决的问题包括但不限于以下几个方面&#xff1a; 数据隐私和安全&#xff1a;随着人工智能技术的发展&#xff0c;个人数据的收集和使用越来越广泛&#xff0c;如何保护个人隐私和数据安全成为一个重要问题。 伦理和道德问题&#xff1…

初试PostgreSQL数据库

文章目录 一、PostgreSQL数据库概述1.1 PostgreSQL的历史1.2 PostgreSQL安装1.3 安装PostgreSQL二、PostgreSQL起步2.1 连接数据库2.1.1 SQL Shell2.1.2 执行SQL语句2.2 pgAdmin 42.2.1 打开pgAdmin 42.2.2 查找数据库2.2.3 打开查询工具2.2.4 执行SQL语句三、实战小结文章目录…

LLM-生成器判别器的实现

总结 首先&#xff0c;使用GPT模型获取每个词的生成概率 pLLMp_{LLM}pLLM​。然后&#xff0c;使用训练好的生成判别器&#xff0c;对每个可能的生成结果进行打分&#xff0c;得到 pθ(c∣x1:t)p_\theta(c|x_{1:t})pθ​(c∣x1:t​)。最后&#xff0c;结合两者的输出&#xff…

JAVA就业笔记6——第二阶段(3)

课程须知 A类知识&#xff1a;工作和面试常用&#xff0c;代码必须要手敲&#xff0c;需要掌握。 B类知识&#xff1a;面试会问道&#xff0c;工作不常用&#xff0c;代码不需要手敲&#xff0c;理解能正确表达即可。 C类知识&#xff1a;工作和面试不常用&#xff0c;代码不…

中科星图GVE(案例)——AI实现道路提取分析

目录 简介 函数 gve.Services.AI.roadExtraction(fromGridRes) 代码 结果 中科星图GVE&#xff08;案例&#xff09;——AI实现道路提取分析 简介 AI实现道路提取分析是指利用人工智能技术&#xff0c;通过对图像或地理数据的处理和分析&#xff0c;自动识别和提取道路信…

创新设计大师项骅:用卓越才华打造医疗科技新未来

项骅,这位在设计界声名鹊起的才俊,正准备在其璀璨的职业生涯中开启一个激动人心的新篇章。近日,他宣布即将进军医疗科技领域,这一决定在设计圈和医疗界引起了广泛关注。项骅计划以UX设计师的身份,致力于改善医疗服务的用户体验。谈到这个新挑战,他显得兴致勃勃:"我期待将我…

WPS没保存关闭了怎么恢复文档数据呢?3个方法让你轻松恢复

在日常的工作和学习中&#xff0c;我们经常会使用WPS Office这款办公软件来处理文档、表格和演示文稿等文件。然而&#xff0c;有时由于各种原因&#xff0c;我们可能会在未保存的情况下关闭了WPS&#xff0c;导致重要的数据丢失。那么&#xff0c;WPS没保存关闭了怎么恢复数据…

图像及视频的基本操作

文章目录 一、认识计算机中的图像二、图像数据的读取三、数据读取-视频四、图像的其他操作 一、认识计算机中的图像 一张彩色图片是由很多个像素点组合而成的&#xff0c;而一个像素点是由R G B三个通道组成。RGB代表红色&#xff08;Red&#xff09;、绿色&#xff08;Green&a…

我常用的两个单例模式写法 (继承Mono和不继承Mono的)

不继承Mono 不继承Mono代表不用挂载到场景物体上面&#xff0c;因此直接饿汉式 加 合并空运算符判空创建实例 >(lambda表达式)的意思是get&#xff0c;就是将instance赋给Instance属性 //单例private static JsonDataManager instance new JsonDataManager();public stati…

【JavaScript进阶】深入探讨JS中的对象及其事件处理

1.JS中的对象(掌握) 1. Array数组对象&#xff08;重点&#xff09; 数组对象是使用单独的变量名来存储一系列的值。 1.1创建一个数组 创建一个数组&#xff0c;有三种方法。 【1】常规方式: let 数组名 new Array(); 【2】简洁方式: 推荐使用 let 数组名 new Array(数…