【Spring Boot】Thymeleaf模板引擎 — Thymeleaf表达式

news2024/9/21 8:04:12

Thymeleaf表达式

本节介绍Thymeleaf的各种表达式,通过一些简单的例子来演示Thymeleaf的表达式及用法。

1.变量表达式

变量表达式即获取后台变量的表达式。使用${}获取变量的值,例如:

<p th:text="${name}">hello</p>

在上面的示例中,通过${name}获取后台返回的model的属性。标签中的th:text属性用来填充该标签的内容。

如果后台返回的是对象,则使用变量名.属性名方式获取,这一点和EL表达式一样。

<p th:text="${user.memo}">备注</p>

在上面的示例中,使用${user. memo}可以获取model中的user对象的memo属性。

2.选择或星号表达式

选择表达式与变量表达式类似,不过它用一个预先选择的对象来代替上下文变量容器(map)执行*{name}。什么是预先选择的对象?就是父标签的值。示例代码如下:

<div th:object="${session.user}">
	<p>Name: <span th:text="*{firstName}">Sebastian</span>.</p>
	<p>Surname: <span th:text="*{lastName}">Pepper</span>.</p>
	<p>Nationality: <span th:	text="*{nationality}">Saturn</span>.</p>
</div>
// 等价于<div>
	<p>Name: <span th:text="${session.user.firstName}">Sebastian</span>.</p>
	<p>Surname: <span th:text="${session.user.lastName}">Pepper</span>.</p>
	<p>Nationality: <span th:text="${session.user.nationality}">Saturn</span>.</p>
</div>

在上面的示例中,我们用th:object预先定义了对象变量${session.user},然后使用星号(*)获取了user变量中的各个属性。例如*{firstName}等价于${session.user.firstName}。这两种使用方式的区别如下:

1)在不考虑上下文的情况下,两者没有区别,只是星号语法评估在选定对象上表达,而不是整个上下文。

2)美元符号($)和星号(*)语法可以混合使用。

3.URL表达式

URL在Web应用中占据着十分重要的地位,如引用静态资源文件、处理URL链接等。Thymeleaf通过@{…}语法来处理URL表达式,主要使用th:href、th:src等属性引用CSS、JS等静态资源文件、下面通过示例演示URL表达式的使用。

3.1引入静态资源文件

Thymeleaf页面使用th:href属性引入CSS资源文件:

<link rel="stylesheet" th:href="@(/resources/css/bootstrap.min.css)"/>

在上面的示例中,默认访问resources下的css文件夹。

Thymeleaf页面使用th:src属性引入JS资源文件:

<script th:src="@{/resource/js/bootstrap.min.js]"></script>

默认访问resources下的js文件夹。

3.2使用 @{…} 设置背景图片

<div th:style="'background:url('+ @{${imgurl}} +');'"></div>

上面的路径使用@{${imgurl}指定图片的路径,Thymeleaf也通过th:background设置背景。

3.3URL链接

Thymeleaf支持在<a>标签中使用th:href来处理URL链接:

	<a th:href="@{http://www.a.com/user/u123456}">绝对路径</a>
	<a th:href="@{/order}">相对路径</a>

在上面的示例中,th:href属性修饰符将计算并替换使用href链接的URL值,并放入href属性中。

同样,th:href也支持URL参数传递,我们可以使用带参数的URL表达式,示例如下:

<a th:href="@{/order/details(orderId=${orderId})}">view</a>

在上面的示例中,@{…}表达式中通过{orderId}访问上下文中的orderId变量。最后的(orderId=${o.id})表示将括号内的内容作为URL参数处理,该语法避免使用“&”拼接URL参数,大大提高了可读性。

如果需要多个参数,将用逗号分隔,比如:

<a th:href="@{/order/process(execId=${execId},execType='FAST')}">view</a>

在上面的示例中,使用@{}表达式创建URL,同时传递execId和execType两个参数,比使用“&”拼接更简单易读。

4.文字国际化表达式

文字国际化表达式允许我们从一个外部文件获取区域文字信息,使用类似于#{login.tip}的表达式。下面通过示例演示Thymeleaf实现国际化。

步骤01 创建国际化资源。

Spring Boot支持国际化,我们在resources资源文件目录下新建i18n文件夹,在该文件夹下创建test_zh_CN.properties和test_en_US.properties两个文件(也可以直接创建Resource Bundle文件夹),然后增加测试属性。

在这里插入图片描述

我们创建了test的国际化资源配置文件,增加了login.tip属性并配置了对应的中英文。

步骤02 修改系统国际化配置。

在application.properties中加入上面定义的国际化配置:

@spring.messages.basename=i18n.test

步骤03 在页面中引用国际化资源。

在resource/templates目录下创建i18n.html页面,示例代码如下:

<!DOCTYPE htm1>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head lang="en">
	<meta charset="UTF-8" />
	<title></title>
</head>
<body>
<h1>Thymeleaf模板引擎</h1>
<h3>国际化</h3>
<p th:text="#{login.tip}">Please log in</p>
</body>
</htm1>

在上面的示例中,通过文字国际化表达式#{login.tip}获取属性配置。

步骤04 创建后台请求。

在之前的HelloController中加入如下代码:

@RequestMapping("/i18n")
public String i18n() {
	return "i18n";
}

步骤05 运行测试。

配置完成之后启动项目,在浏览器中访问http://localhost:8080/i18n来验证国际化配置是否生效。

在这里插入图片描述
通过#{login.tip}表达式,获取到了国际化资源配置中的中文内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/835220.html

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

相关文章

Windows Server 2012 R2 安装 Oracle RAC 11g R2

Windows Server 2012 R2 安装 Oracle RAC 11g R2 环境准备安装系统设置虚拟网络配置虚拟机网卡开机进行系统配置关闭防火墙设置网络系统高级设置修改注册表修改计算机名称设置账户控制RAC1 和 RAC2 的磁盘共享修改 hosts同步时间在 RAC1 RAC2 DATA 中安装 .net3.5在 DATA 中搭建…

windows下redis的下载和安装

文章目录 1 下载2 打开解压文件&#xff0c;可以看到以下内容3 使用命令进行安装和注册redis到window服务4 查看服务 1 下载 https://github.com/MicrosoftArchive/redis/releases 2 打开解压文件&#xff0c;可以看到以下内容 3 使用命令进行安装和注册redis到window服务 …

一文学透设计模式——抽象工厂模式

创建者模式 抽象工厂模式 概念 抽象工厂模式是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式&#xff0c;它提供了一种创建对象的最佳方式。 这是很多地方对于抽象工厂模式的描述&#xff0c;说实话感觉不是特别好懂。…

ResNet-残差网络一

文章目录 残差网络深度网络退化残差结构残差网络对比测试plain net VS residual net不同的shrotcut connection残差网络增加层数 著名的残差网络主要是在两片论文里提出&#xff1a; Deep Residual Learning for Image RecognitionIdentity Mappings in Deep Residual Networks…

yolov8在rknn(rv1109/1126)模型转换、量化移植过程

续&#xff1a;rv1109/1126 rknn 模型量化过程_CodingInCV的博客-CSDN博客 Yolov8简介 yolov8是比较新的目标检测模型&#xff0c;根据论文和开源项目的报告&#xff0c;相对使用比较广泛的yolov5提升还比较明显。 yolov8与yolov5相比&#xff0c;结构上的主要区别是将C3结构…

hutool Sm2加解密-自定义公钥私钥

代码 首先说结论&#xff0c;hutool 的SM2对象的公钥私钥是不关联的&#xff0c;你可以存自己的私钥和别人的公钥&#xff0c;这样解密的时候只要协商好就能用了&#xff0c;以下是调换公钥私钥的加解密案例 公钥格式 04公钥x公钥y //使用自定义的公钥私钥生成sm2Testpubli…

android资深工程师如何分析system_server异常

Android系统中的System Server负责管理许多关键功能&#xff0c;例如进程管理、电源管理等。如果System Server出现异常&#xff0c;可能会导致系统重启或部份功能失效。作为Android资深工程师&#xff0c;分析System Server的异常状况时&#xff0c;考虑以下步骤&#xff1a;查…

晶澳转债上市价格预测

晶澳转债 基本信息 转债名称&#xff1a;晶澳转债&#xff0c;评级&#xff1a;AA&#xff0c;发行规模&#xff1a;89.603077亿元。 正股名称&#xff1a;晶澳科技&#xff0c;今日收盘价&#xff1a;31.71元&#xff0c;转股价格&#xff1a;38.78元。 当前转股价值 转债面值…

我做了一个JPA Specification的优化

目录 一、参考二、概述流程效果感受 三、实现原理AST树结构AstNode主要结构 把表达式解析成AstAst 解析成 JPA Specification 三、项目地址四、目前阶段的总结 一、参考 如何搞一个支持自定义函数和变量的四则运算的抽象语法树出来 二、概述 这是一个可以优化生成Specificati…

Android SystemServer中Service的创建和启动方式(基于Android13)

Android SystemServer创建和启动方式(基于Android13) SystemServer 简介 Android System Server是Android框架的核心组件&#xff0c;运行在system_server进程中&#xff0c;拥有system权限。它在Android系统中扮演重要角色&#xff0c;提供服务管理和通信。 system …

Pycharm中修改注释文本的颜色(详细设置步骤)

下面是在Pycharm中设置注释文本颜色的详细步骤&#xff1a; 下面是修改前后对比&#xff1a; 修改前注释行的颜色&#xff1a; 修改后注释行的颜色&#xff1a; 以上就是Pycharm中修改注释文本颜色的详细步骤&#xff0c;希望能帮到你&#xff01;

pve安装dsm7.2,并启用照片同步

目录 1.文件准备 2. 创建虚拟机 3. 编译引导文件 4. 群晖安装 5. 安装Photos和mmfpeg 6. 安装手机APP 之前安装了pve版本的dsm6.2了&#xff0c;近期换硬盘&#xff0c;加上对dsm6.2的moments性能实在不满意&#xff0c;就产生尝鲜的想法&#xff0c;因为dsm7.0发布很久了…

2024年浙财MBA项目招生信息全面了解

2024年全国管理类硕士联考备考已经到了最火热的阶段&#xff0c;不少考生开始持续将注意力集中在备考的规划中&#xff01;杭州达立易考教育整合浙江省内的MBA项目信息&#xff0c;为大家详细梳理了相关报考参考内容&#xff0c;方便大家更好完成择校以及针对性的备考工作。本期…

Day12-作业(SpringBootWeb登录认证)

作业1&#xff1a;完成课上所讲解的 登录 及 登录校验 的所有功能。[ 必须 &#xff0c;至少敲两遍 - Filter] 作业2&#xff1a;调研第三方加密技术和落地方案&#xff0c;优化登录业务流程。 提示&#xff1a;推荐使用加盐加密的方式&#xff0c;对密码进行加密并校验 作业3…

【快应用】adbutton如何直接下载广告而不跳落地页再下载

【关键词】 原生广告、adbutton、下载 【问题背景】 快应用中的原生广告推出了adbutton组件来直接下载广告app&#xff0c;在使用的时候&#xff0c;点击adbutton按钮的安装文案&#xff0c;不是直接下载广告app&#xff0c;而是跳转到落地页后直接下载&#xff0c;这种情形该…

企业工程项目管理系统源码(三控:进度组织、质量安全、预算资金成本、二平台:招采、设计管理) em

​ 工程项目管理软件&#xff08;工程项目管理系统&#xff09;对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营&#xff0c;全过程、全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一、系统管理 1、数据字典&#…

cad中的曲线区域是如何绘制的

cad中的曲线区域是如何绘制的 最近需要把cad中的设备锁在区域绘画出来&#xff0c;不同设备放在不同区域 组合工具命令PLPE 步骤&#xff1a; 1.先用pl绘制&#xff0c;把设备都是绘制在pl的曲线范围内 2.用pe命令&#xff0c;选择pl的区域进行曲线&#xff08;s&#xff…

基于SpringBoot+Vue的MOBA类游戏攻略分享平台设计与实现(源码+LW+部署文档等)

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

软考A计划-系统集成项目管理工程师-信息文档和配置管理-下

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

华为杯竞赛、高教社杯和数学建模国赛实现逆袭;评奖评优加分冲冲冲!

目录 ⭐ 赛事介绍 ⭐ 参赛好处 ⭐ 辅导比赛 ⭐ 赛事介绍 华为杯全国研究生数学建模竞赛是由华为公司主办的一项面向全国研究生的数学建模竞赛。该竞赛旨在通过实际问题的建模和解决&#xff0c;培养研究生的创新能力和团队合作精神&#xff0c;推动科技创新和应用。华为杯竞…