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

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}表达式,获取到了国际化资源配置中的中文内容。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

leetcode 763. 划分字母区间

2023.8.3 本题的关键是要确保同一字母需要在同一片段中&#xff0c;而这就需要关注到每个字母最后一次出现的位置。 思路&#xff1a;用一个哈希表保存每个字母&#xff08;26个&#xff09;最后一次出现的位置。然后从头遍历&#xff0c;不断更新最右边界&#xff0c;直到当前…

一个严肃的话题,ADR会取代WAF和RASP吗?

做安全的人应该都对WAF耳熟能详&#xff0c;也就是我们常说的Web应用防火墙&#xff0c;成为了应用安全防护的明星产品之一。从传统的防火墙、IDS、IPS&#xff0c;再到WAF横空出世&#xff0c;引领技术趋势若干年&#xff0c;这一阶段可以称为应用安全防护1.0时代。作为一款成…

计算机毕设 深度学习疫情社交安全距离检测算法 - python opencv cnn

文章目录 0 前言1 课题背景2 实现效果3 相关技术3.1 YOLOV43.2 基于 DeepSort 算法的行人跟踪 4 最后 0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到毕业答辩的要求&#xff0c;这两…

jar命令的安装与使用

场景&#xff1a; 项目中经常遇到使用WinR软件替换jar包中的文件&#xff0c;有时候存在WinRAR解压替换时提示没有权限&#xff0c;此时winRAR不能用还有有什么方法替换jar包中的文件。 方法&#xff1a; 使用jar命令进行修改替换 问题&#xff1a; 执行jar命令报错jar 不…

【从零开始学习JAVA | 第三十七篇】初识多线程

目录 前言&#xff1a; ​编辑 引入&#xff1a; 多线程&#xff1a; 什么是多线程&#xff1a; 多线程的意义&#xff1a; 多线程的应用场景&#xff1a; 总结&#xff1a; 前言&#xff1a; 本章节我们将开始学习多线程&#xff0c;多线程是一个很重要的知识点&#xff…

MYSQL进阶-事务

1.什么是数据库事务&#xff1f; 事务是一个不可分割的数据库操作序列&#xff0c;也是数据库并发控制的基本单位&#xff0c;其执 行的结果必须使数据库从一种一致性状态变到另一种一致性状态。事务是逻辑上 的一组操作&#xff0c;要么都执行&#xff0c;要么都不执行。 事务…

使用 LangChain 搭建基于 Amazon DynamoDB 的大语言模型应用

LangChain 是一个旨在简化使用大型语言模型创建应用程序的框架。作为语言模型集成框架&#xff0c;在这个应用场景中&#xff0c;LangChain 将与 Amazon DynamoDB 紧密结合&#xff0c;构建一个完整的基于大语言模型的聊天应用。 本次活动&#xff0c;我们特意邀请了亚马逊云科…

华为云CTS 使用场景

云审计服务 CTS 云审计服务&#xff08;Cloud Trace Service&#xff09;&#xff0c;帮助您监控并记录华为云账号的活动&#xff0c;包括通过控制台、API、开发者工具对云上产品和服务的访问和使用行为&#xff0c;提供对各种云资源操作记录的收集、存储和查询功能&#xff0…

应用在多媒体手机中的低功率立体声编解码器

多媒体手机一般是指可以录制或播放视频的手机。多媒体的定义是多种媒体的综合&#xff0c;一般是图像、文字、声音等多种结合&#xff0c;所以多媒体手机是可以处理和使用图像文字声音相结合的移动设备。目前流行的多媒体概念&#xff0c;主要是指文字、图形、图像、声音等多种…

【0803作业】创建两个线程:其中一个线程拷贝图片的前半部分,另一个线程拷贝后半部分(4种方法)

方法一&#xff1a;使用pthread_create、pthread_exit、pthread_join函数【两个线程不共用同一份资源】 先在主函数创建并清空拷贝的目标文件&#xff0c;再创建两个线程&#xff0c;在两个线程内部同时打开要读取的文件以及要拷贝的目标文件&#xff08;两个线程不共用同一份资…

Vulnhub: BlueMoon: 2021靶机

kali&#xff1a;192.168.111.111 靶机&#xff1a;192.168.111.174 信息收集 端口扫描 nmap -A -sC -v -sV -T5 -p- --scripthttp-enum 192.168.111.174 80端口目录爆破&#xff0c;发现文件&#xff1a;hidden_text gobuster dir -u http://192.168.111.174 -w /usr/sha…

牛客网Verilog刷题——VL41

牛客网Verilog刷题——VL41 题目答案 题目 请设计一个可以实现任意小数分频的时钟分频器&#xff0c;比如说8.7分频的时钟信号&#xff0c;注意rst为低电平复位。提示&#xff1a;其实本质上是一个简单的数学问题&#xff0c;即如何使用最小公倍数得到时钟周期的分别频比。设小…

RabbitMQ教程与安装

1 在CentOS7中安装RabbitMQ 在 CentOS 中安装 RabbitMQ 的命令如下&#xff1a; 首先&#xff0c;确保已经安装了 EPEL 软件包存储库。如果没有&#xff0c;请运行以下命令安装它&#xff1a; sudo yum install epel-release 更新系统的软件包列表&#xff1a; sudo yum upda…

成本控制策略:加强企业安全

我们生活在一个不确定的时代。大多数经济学家预测&#xff0c;今年全球经济将继续放缓&#xff0c;亚太地区当然也不会逆势而上。 在供应链问题、大规模裁员、高通胀和高利率之间&#xff0c;我们毫不奇怪地看到大多数公司和行业采取谨慎态度&#xff0c;战略、增长计划和预算…

艺术二维码 API 申请及使用

艺术二维码是一种创新的技术产品&#xff0c;它将二维码与美观的背景图像相结合&#xff0c;创造出既实用又美观的作品。它们不仅具有传统二维码的功能性&#xff0c;能被智能设备快速扫描识别&#xff0c;还加入了艺术元素&#xff0c;增强了视觉吸引力和品牌识别度。其中&…

GPT Prompt编写的艺术:如何提高AI模型的表现力

随着AI技术的迅速发展&#xff0c;人工智能模型变得越来越强大&#xff0c;能够协助我们完成各种任务。然而&#xff0c;如何更好地利用AI的能力仍然存在很大的探索空间。在与AI进行交互的过程中&#xff0c;我们主要依赖于Prompt&#xff0c;不管是直接与大模型交互&#xff0…

opencv-34 图像平滑处理-2D 卷积 cv2.filter2D()

2D卷积是一种图像处理和计算机视觉中常用的操作&#xff0c;用于在图像上应用滤波器或卷积核&#xff0c;从而对图像进行特征提取、平滑处理或边缘检测等操作。 在2D卷积中&#xff0c;图像和卷积核都是二维的矩阵或数组。卷积操作将卷积核在图像上滑动&#xff0c;对每个局部区…

Robot Framweork之UI自动化测试---分层设计

Robot Framework 的分层思想是一种测试设计和代码组织的模式&#xff0c;它将测试用例的实现和测试执行逻辑分离&#xff0c;以提高测试的可维护性、可读性和可扩展性。 一、分层思想 在实际项目中&#xff0c;一般分为三层&#xff1a;元素层&#xff0c;流程层&#xff0c;用…

k8s之Helm安装

一、最快安装–官网提供的脚本–默认获取最新版本 cd /usr/local/src/ curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 chmod 700 get_helm.sh ./get_helm.shhelm search hub wordpresssource <(helm completion bash) h…

pycharm——漏斗图

import pyecharts.options as opts from pyecharts.charts import Funnel""" Gallery 使用 pyecharts 1.1.0 参考地址: https://echarts.apache.org/examples/editor.html?cfunnel目前无法实现的功能:1、暂时无法对漏斗图的长宽等范围操作进行修改 ""…