Thymeleaf的基本语法
Thymeleaf 主要通过在 HTML 标签上添加以th:开头的属性来实现模板功能,以下是其基本语法:
1. 变量表达式
用 ${} 来获取后端传递到模板的数据,例如:
html
<p th:text="${message}">默认消息</p>
上述代码中,${message} 表示获取名为 message 的变量值,并通过 th:text
属性将其显示在 <p>
标签内。若 message 未赋值,则显示 “默认消息” 。此外,还有 th:utext
用于输出非转义的 HTML 内容,比如:
html
<div th:utext="${htmlContent}">html 内容</div>
2. 条件判断指令
th:if:
根据表达式结果决定元素是否渲染,当表达式为 true 时,元素会显示在最终生成的页面中;为 false 时,元素不会被渲染。例如:
html
<div th:if="${user.age >= 18}">成年人</div>
只有当 user.age 大于等于 18 时,这个 <div>
标签及其内容才会显示。
th:unless:
与 th:if
相反,当表达式为 false 时,元素渲染显示;表达式为 true 时,元素不渲染。示例如下:
html
<div th:unless="${user.age >= 18}">未成年</div>
当 user.age 小于 18 时,该 <div>
标签及其内容会显示。
3. 循环遍历指令
使用 th:each
指令来遍历数组、集合等。语法格式为 th:each=“循环变量 : ${集合变量}” 。例如:
html
<ul>
<li th:each="user : ${userList}" th:text="${user.name}">用户名</li>
</ul>
上述代码会遍历 userList 集合,为集合中的每个 user 对象生成一个 <li>
标签,并将 user.name 的值显示在 <li>
标签内。
4. URL 表达式
使用 @{} 来引入 URL,可用于引入静态资源或定义链接。
引入静态资源:比如引入 CSS 样式表或 JavaScript 文件,示例如下:
html
<link rel="stylesheet" th:href="@{/css/main.css}">
<script th:src="@{/js/app.js}"></script>
定义链接:可以指定绝对路径或相对路径,还能方便地处理 URL 参数。例如:
html
<a th:href="@{/user/detail}">用户详情</a>
<a th:href="@{/order/details(orderId=${order.id})}">订单详情</a>
第一个链接是相对当前项目根路径的链接;第二个链接将 order.id 作为参数嵌入到 URL 中,并且会自动进行 URL 参数编码操作 。如果有多个参数,用逗号分隔,如 @{/order/process(execId=${execId}, execType='fast')} 。
5. 选择(星号)表达式
类似于变量表达式,但使用一个预先选择的对象来代替上下文变量容器(map)执行。一般跟在 th:object
后使用,直接选择 object 中的属性。例如:
html
<div th:object="${book}">
<span th:text="*{title}">默认标题</span>
</div>
这里 *{title}
等同于 th:text="${book.title}" ,
前提是通过 th:object
指定了 book 对象 。
6. 文字国际化表达式
用 #{} 从外部 .properties 文件获取区域文字信息,使用 Key 索引 Value,还可提供一组可选参数 。比如:
html
<table>
<th th:text="#{header.address.city}">城市</th>
<th th:text="#{header.address.country}">国家</th>
</table>
在对应的国际化属性文件中,定义如 header.address.city=城市名称 、header.address.country=国家名称 ,就可以根据不同的语言环境显示相应文字。
7. 内置对象操作语法
Thymeleaf 提供了许多内置实用对象,用于方便地处理常见数据操作:
#dates:
用于日期格式化等操作。例如:
html
<span th:text="${#dates.format(dateObj, 'yyyy-MM-dd')}"></span>
可将 dateObj 按 yyyy-MM-dd 格式进行格式化输出。
#strings:
用于字符串处理,如判断是否以某个字符串开头、包含等操作。示例如下:
html
<span th:text="${#strings.startswith(someString, 'prefix')}"></span>
判断 someString 是否以 prefix 开头,并输出 true 或 false 。
- #numbers:用于数字格式化等。
- #bools:用于处理布尔类型数据 。
- #arrays:用于数组相关操作 。
- #sets:用于处理集合(Set) 。
- #maps:用于处理 Map 类型数据 。
- #aggregates:用于对数组或集合进行聚合操作 。