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>