当前位置: 首页 > news >正文

【Spring Boot】Thymeleaf模板引擎 — Thymeleaf的高级用法

Thymeleaf的高级用法

主要介绍Thymeleaf的内联、内置对象、内置变量等高级用法。

1.内联

虽然通过Thymeleaf中的标签属性已经几乎满足了开发中的所有需求,但是有些情况下需要在CSS或JS中访问后台返回的数据。所以Thymeleaf提供了th:inline="text/javascript/none"标签,使用[[…]]内联表达式的方式在HTML、JavaScript、CSS代码块中轻松访问model对象数据。

1.1 文本内联

Thymeleaf内联表达式使用[[…]]或[(…)]语法表达。先在父级标签定义使用内联方式th:inline=“text”,然后在标签内使用[[…]]或[(…)]表达式操作数据对象。文本内联比th:text的代码更简洁。下面通过示例演示内联的使用方式。

首先,创建页面inline.html。示例代码如下:

<h1>Thymeleaf模板引擎</h1>
<div><h1>内联</h1><div th:inline="text"><p>Hello[[${userName}]] !</p><br/></div>
</div>

以上代码等价于:

    <div th:inline="text"><h1>不使用内联</h1><p th:text=" 'Hello’, + ${userName} + '!'"></p><br/></div>

通过以上两个示例可以看出使用内联语法会更简洁一些。

1)th:inline="text"表示使用文本内联方式。

2)任何父标签都可以加上th:inline。

3)[[…]] 等价于th:text结果将被HTML转义,[(…)]等价于th:utext结果不会被HTML转义。

然后,创建后台路由/inline,示例代码如下:

    @RequestMapping("/inline")public String inline(ModelMap map) {map.addAttribute("userName", "admin");return "inline";}

在上面的示例中,后台返回inline.html页面,同时返回userName=admin。

最后,运行测试。启动项目后,在浏览器中输入地址http://localhost:8080/inline,则会出现如图所示的结果。

在这里插入图片描述

页面显示后台返回的userName为admin,比之前介绍的th:text=${userName}的方式更加简单、清晰。

1.2 脚本内联

脚本内联,顾名思义就是在JavaScript脚本中使用内联表达式。使用时只需要在<script>标签上加入th:inline="javascript"属性,然后在JavaScript代码块中就能使用[[]]表达式。实现在JavaScript脚本中获取后台传过来的参数。

首先,修改inline.html页面,增加如下脚本:

<script th:inline="javascript">var name = 'hello, ' + [[${userName}]];alert(name);
</script>

在上面的示例中,在<script>标签内加入th:inline=“javascript”,表示能在JavaScript中使用[ [ ] ]取值。在访问页面时,根据后端传值拼接name值,并以alert的方式弹框展示。

然后启动项目,在浏览器中输入地址http://localhost:8080/inline,会出现如图所示的结果。

在这里插入图片描述

显示页面会先弹出一个alert提示框,显示“hello admin”,说明使用脚本内联绑定了后台传过来的数据。

1.3 样式内联

Thymeleaf还允许在<style>标签中使用内联表达式动态生成CSS属性样式。下面通过示例演示内联CSS样式的用法。

首先,修改inline.html页面,加入如下样式:

<style type="text/css" th:inline="css" th:with="color='yellow', fontSize='25px'">p {color: /*[[${color}]]*/ red;font-size: [(${fontSize})];}
</style>

在上面的示例中,与内联JavaScript一样,CSS内联也允许

然后,修改/inline路由,返回fontSize和color,示例代码如下:

    @RequestMapping("/inline")public String inline(ModelMap map) {map.addAttribute("fontSize", "20px");map.addAttribute("color", "yellow");map.addAttribute("userName", "admin");return "inline";}

在上面的示例中,增加了fontSize和color两个CSS的属性样式,设置fontSize为20px,color为yellow。

然后启动项目,在浏览器中输入地址http://localhost:8080/inline,页面显示的字体大小和颜色根据后台返回的数据显示,说明CSS内联生效。

1.4 禁用内联

Thymeleaf支持使用th:inline =“none”来禁止使用内联。示例代码如下:

<!--/*禁用内联表达式*/-->
<p th:inline="none">[[${info}]]</p>
<!--/*禁用内联表达式*/-->
<p th:inline="none">[[Info]]</p>

2.内置对象

Thymeleaf包含一些内置的基本对象,可以用于视图中获取上下文对象、请求参数、Session等信息。这些基本对象使用#开头,如表所示。

在这里插入图片描述
如表所示,Thymeleaf提供了有一系列的对象和属性用于访问请求参数、会话属性等应用属性。下面以其中两个常用的对象作为示例来演示。

步骤01 定义后台方法传值。

创建一个后台方法,后台传回request请求参数和session属性,示例代码如下:

    @RequestMapping("/object")public String test1(HttpServletRequest request) {request.setAttribute("request", "spring boot");request.getSession().setAttribute("session", "admin session");request.getServletContext().setAttribute("servletContext", "Thymeleaf servletContext");return "baseobject";}

在上面的示例中,我们分别在request和session对象中写入了相关的测试,验证前台是否能获取到这些自定义的Web请求信息。

步骤02 前端页面接收参数。

接下来看看前端页面如何通过Thymeleaf内置的基本对象获取后端传递的值,在/resources目录下新建一个前端页面baseobject.html,示例代码如下:

<h1>Thymeleaf模板引擎</h1>
<h3>基本对象</h3>
<p th:text="${#request.getAttribute('request')}"></p>
<p th:text="${#session.getAttribute('session')}"></p>
<p th:text="${#servletContext.getAttribute('servletContext')}"></p>

在上面的示例中,我们在HTML页面中通过#request、#session这些对象就能获取Web请求中的相关信息。

步骤03 启动验证。

启动项目后,在浏览器中输入地址http://localhost:8080/object,则会出现如图所示的结果。

在这里插入图片描述

在HTML页面中,通过#request、#session这些对象成功获取了后台返回的Web请求信息。

3.内嵌变量

为了模板更加易用,Thymeleaf还提供了一系列公共的Utility对象(内置于Context中),可以通过#直接访问。具体的对象如表所示。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Thymeleaf除了定义上面这些常用的对象外,还有一些其他的utility对象,比如#ids,这里不再逐一列举。

相关文章:

【Spring Boot】Thymeleaf模板引擎 — Thymeleaf的高级用法

Thymeleaf的高级用法 主要介绍Thymeleaf的内联、内置对象、内置变量等高级用法。 1.内联 虽然通过Thymeleaf中的标签属性已经几乎满足了开发中的所有需求&#xff0c;但是有些情况下需要在CSS或JS中访问后台返回的数据。所以Thymeleaf提供了th:inline"text/javascript/…...

用html+javascript打造公文一键排版系统13:增加半角字符和全角字符的相互转换功能

一、实践发现了bug和不足 今天用了公文一键排版系统对几个PDF文件格式的材料进行文字识别后再重新排版&#xff0c;处理效果还是相当不错的&#xff0c;节约了不少的时间。 但是也发现了三个需要改进的地方&#xff1a; &#xff08;一&#xff09;发现了两个bug&#xff1a;…...

元宇宙3D数字虚拟客服打造年轻化、数字化营销新品牌

融合了元宇宙、AI和云计算等技术的虚拟数字人&#xff0c;成为元宇宙数字内容交互的载体&#xff0c;将现实世界中的人与虚拟数字世界的场景、模型及产品链接起来&#xff0c;特别是为电力企业打造的电力元宇宙平台&#xff0c;带来营销宣传多重好处的同时&#xff0c;树立了数…...

micromamba快速安装(windows版本)

快速安装 Micromamba Micromamba 是一个静态链接的 C++ 可执行文件,在 Windows 上就是一个 micromamba.exe 文件,下载下来就直接可以用,甚至都不需要专门安装。唯一需要做的就是设置 Shell 的 Profile 文件,使 micromamba 成为可以在命令行里调用的一个命令。 Micromamba…...

HTML <source> 标签

实例 拥有两份源文件的音频播放器。浏览器应该选择它所支持的文件(如果有的话): <audio controls><source src="horse.ogg" type="audio/ogg"><source src="horse.mp3" type="audio/mpeg">Your browser does n…...

香港第一金:加息预期仍令贵金属承压,黄金仍需关注破位情况

香港第一金基本面分析&#xff1a; 中国纸黄金交易通显示&#xff0c;全球最大黄金上市交易基金(ETF)截至06月27日持仓量为925.66吨&#xff0c;较上日减持1.44吨&#xff0c;本月止净减持13.90吨。 周二美国公布的上月新屋销售飙升12.2%&#xff0c;经季节调整后折合成年率为…...

C语言学习笔记 vscode使用外部console-11

前言 在默认情况下&#xff0c;我们运行C语言程序都是在vscode终端的&#xff0c;在小程序运行时这个是没有问题的&#xff0c;但是当程序变得复杂它就不好用了&#xff0c;这时我们可以将这个终端设置为外部console&#xff0c;这样方便处理更多、更复杂的程序。 步骤 1.点击…...

96 | Python 小项目—— 学生成绩管理系统

文章目录 项目概述功能点2. 登录界面3. 主页面4. 数据录入界面5. 数据删除界面6. 数据修改界面7. 数据查询界面8. 成绩排名界面9. 成绩分析界面10. 学生信息查询界面11. 运行和测试总结项目概述 学生成绩管理系统是一个简单的学生课程管理系统,旨在帮助学校或教育机构轻松管理…...

【uniapp使用web-view点击返回报错后返回不了】

问题及解决 问题解决 问题 使用web-view跳转到别人的网站之后点击返回报错&#xff0c;返回不了 解决 使用以下方法 <template><view></view> </template> <script> var wv;//计划创建的webview export default {onLoad() {// #ifdef APP-PL…...

Map Reduce教程_编程入门自学教程_菜鸟教程-免费教程分享

教程简介 MapReduce是一种编程模型&#xff0c;用于大规模数据集&#xff08;大于1TB&#xff09;的并行运算。概念"Map&#xff08;映射&#xff09;"和"Reduce&#xff08;归约&#xff09;"&#xff0c;是它们的主要思想&#xff0c;都是从函数式编程语…...

吉利科技携手企企通,打造集团化数智供应链系统

近日&#xff0c;吉利科技集团有限公司&#xff08;以下简称“吉利科技”&#xff09;联合企企通成功召开SRM采购供应链管理项目启动会。企企通与吉利科技高层、项目负责人与团队成员出席此次启动会。 双方将携手在企业供应商全生命周期管理、采购全流程、电子招投标、采购分析…...

2023河南萌新联赛第(四)场:河南大学 F - 小富的idea

2023河南萌新联赛第&#xff08;四&#xff09;场&#xff1a;河南大学 F - 小富的idea 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld 题目描述 要注意节约 卷王小富最近又在内卷&a…...

总结线程池

什么是线程池 线程池&#xff08;Thread Pool&#xff09;是一种用于管理和复用线程的技术&#xff0c;它可以在多线程编程中有效地管理线程的创建、执行和销毁。是一种有效管理线程的机制&#xff0c;可以提高多线程编程的效率、性能和资源利用率。它在许多并发编程的场景中被…...

基础的 lftp 使用方法

lftp 是一个功能强大的文件传输工具&#xff0c;支持FTP、HTTP、SFTP、FISH等多种协议。它提供了一套丰富的命令&#xff0c;使得文件传输和管理更加简便。以下是一些基础的 lftp 使用方法&#xff1a; 连接到FTP服务器&#xff1a; lftp ftp://username:passwordhostname如果不…...

python之prettytable库的使用

文章目录 一 什么是prettytable二 prettytable的简单使用1. 添加表头2. 添加行3. 添加列4. 设置对齐方式4. 设置输出表格样式5. 自定义边框样式6. 其它功能 三 prettytable在实际中的使用 一 什么是prettytable prettytable是Python的一个第三方工具库&#xff0c;用于创建漂亮…...

google PGS 下一代id

前言&#xff1a;为了进一步增强用户的隐私及其多平台游戏体验&#xff0c;Play 游戏服务(PGS) 正在推出下一代玩家 ID&#xff0c;用户第一次玩游戏时&#xff0c;他们将始终被分配一个唯一的下一代玩家 ID&#xff0c;无论用户在什么设备或平台上玩游戏&#xff0c;该 ID 都将…...

【elasticsearch】关于elasticsearch的max_result_window限制问题的解决方式思考

事情起因&#xff1a;我们使用es作为日志搜索引擎&#xff0c;客户收集到的业务日志非常之大&#xff0c;每次查询后&#xff0c;返回页数较多&#xff0c;由于我们web界面限制每页返回150条&#xff0c;当客户翻到66页之后就会报错。 文章目录 前言 二、实验 1.默认生成20条数…...

音频光耦合器

音频光耦合器是一种能够将电信号转换为光信号并进行传输的设备。它通常由发光二极管&#xff08;LED&#xff09;和光敏电阻&#xff08;光电二极管或光敏电阻器&#xff09;组成。 在音频光耦合器中&#xff0c;音频信号经过放大和调节后&#xff0c;被转换为电流信号&#xf…...

【C++精华铺】3.C++入门 引用(const)、内联函数

目录 1. 引用 1.1 引用特性 1.2 常引用 1.2.1 权限放大 1.2.2 权限缩小 1.3 使用场景 1.3.1 传参 1.3.2 做返回值 1.4 传值和传引用的效率比较 1.5 引用和指针的区别 2. 内联函数 2.1 inline 2.2 特性 1. 引用 在C中&#xff0c;引入了一个新的概念引用&#xff0c;与…...

生态系统服务(InVEST模型)供给与需求、价值核算技术及人类活动、重大工程项目、自然保护区、碳中和等领域中实际案例分析

对接工作实际项目及论文写作&#xff0c;解决参会者关注的重点及实际项目过程问题&#xff0c;采取逐步延伸的逻辑&#xff0c;不论您是小白亦或是已经能够成功运行InVEST模型生成结果&#xff0c;您可以自由选择课程内容&#xff0c;如果您是小白老师手把手教您&#xff0c;如…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

libfmt: 现代C++的格式化工具库介绍与酷炫功能

libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库&#xff0c;提供了高效、安全的文本格式化功能&#xff0c;是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全&#xff1a…...

uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)

UniApp 集成腾讯云 IM 富媒体消息全攻略&#xff08;地理位置/文件&#xff09; 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型&#xff0c;核心实现方式&#xff1a; 标准消息类型&#xff1a;直接使用 SDK 内置类型&#xff08;文件、图片等&#xff09;自…...