Thymeleaf 教程

变量表达式

Thymeleaf 中,使用 ${} 包裹的表达式被称为变量表达式,该表达式具有以下功能:

  • 获取对象的属性和方法

  • 使用内置的基本对象

  • 使用内置的工具对象

获取对象的属性和方法

使用变量表达式可以获取对象的属性和方法,例如:获取 user 对象的 username 属性,以及嵌套对象 address 的 province 属性。如下:

<p th:text="${datetime}"></p>
<p th:text="${user.username}"></p>
<p th:text="${user.address.province}"></p>

渲染结果如下:

<p>2022年11月05日 13:35:50</p>
<p>Tom</p>
<p>四川省</p>

注意:th:text 属性用来设置 <p> 标签的值,具体用法在后续章节将进行介绍。

使用内置的基本对象

使用变量表达式还可以使用内置基本对象,获取内置对象的属性,调用内置对象的方法。Thymeleaf 中常用的内置基本对象如下:

  • #ctx :上下文对象,即 context;

  • #vars :上下文变量

  • #locale:上下文的语言环境

  • #request:HttpServletRequest 对象(仅在 Web 应用中可用)

  • #response:HttpServletResponse 对象(仅在 Web 应用中可用)

  • #session:HttpSession 对象(仅在 Web 应用中可用)

  • #servletContext:ServletContext 对象(仅在 Web 应用中可用)

例如:通过内置对象获取请求URI、属性和 Session ID 以及响应类型:

<p th:text="${#request.getRequestURI()}"></p>
<p th:text="${#request.getAttribute('myAttr')}"></p>
<p th:text="${#request.getSession().getId()}"></p>
<p th:text="${#response.getContentType()}"></p>

渲染结果如下:

<p>/view/2.html</p>
<p>class com.hxstrive.thymeleaf.controller.ViewController</p>
<p>16CCBE3245CDFAB516AF42F6A8B694D9</p>
<p>text/html;charset=UTF-8</p>

使用内置的工具对象

除了能使用内置的基本对象外,变量表达式还可以使用一些内置的工具对象。

  • strings:字符串工具对象,常用方法有:equals、equalsIgnoreCase、length、trim、toUpperCase、toLowerCase、indexOf、substring、replace、startsWith、endsWith,contains 和 containsIgnoreCase 等;

  • numbers:数字工具对象,常用的方法有:formatDecimal 等;

  • bools:布尔工具对象,常用的方法有:isTrue 和 isFalse 等;

  • arrays:数组工具对象,常用的方法有:toArray、length、isEmpty、contains 和 containsAll 等;

  • lists/sets:List/Set 集合工具对象,常用的方法有:toList、size、isEmpty、contains、containsAll 和 sort 等;

  • maps:Map 集合工具对象,常用的方法有:size、isEmpty、containsKey 和 containsValue 等;

  • dates:日期工具对象,常用的方法有:format、year、month、hour 和 createNow 等。

例如:使用内置工具对象 strings 的 equals 方法,来判断字符串与对象的某个属性是否相等,使用 strings 的 length 方法获取字符串的长度等等。代码如下。

<h1 th:text="${datetime}"></h1>

<!-- 判断 datetime 字符串是否等于 “hello” 字符串,false -->
<p th:text="${#strings.equals('hello',datetime)}"></p>

<!-- 计算 datetime 变量字符串的长度,20 -->
<p th:text="${#strings.length(datetime)}"></p>

<!-- 使用 dates.month() 获取年份和月份 -->
<p th:text="${#dates.year(data_date)}"></p>
<p th:text="${#dates.month(data_date)}"></p>

渲染结果如下:

<h1>2022年11月14日 13:22:50</h1>

<!-- 判断 datetime 字符串是否等于 “hello” 字符串,false -->
<p>false</p>

<!-- 计算 datetime 变量字符串的长度,20 -->
<p>20</p>

<!-- 使用 dates.month() 获取月份 -->
<p>2022</p>
<p>11</p>
说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号