thymeleaf 内置对象
时间: 2023-10-15 19:23:36 浏览: 261
Thymeleaf 是一个用于在服务器端渲染 HTML 页面的模板引擎,它提供了许多内置对象来简化模板中的数据处理和操作。
下面是 Thymeleaf 的一些常用内置对象:
1. `#request`:表示当前 HTTP 请求的对象,可以用于获取请求参数或属性。
2. `#response`:表示当前 HTTP 响应的对象,可以用于设置响应头或状态码。
3. `#session`:表示当前用户的会话对象,可以用于存取会话数据。
4. `#servletContext`:表示当前 Web 应用程序的上下文对象,可以用于获取全局配置信息。
5. `#locale`:表示当前用户的地区信息,用于国际化处理。
6. `#dates`:用于处理日期和时间的工具类。
7. `#calendars`:用于处理日历相关操作的工具类。
8. `#numbers`:用于处理数字格式化和计算的工具类。
9. `#strings`:用于处理字符串操作的工具类。
10. `#arrays`:用于处理数组和集合操作的工具类。
11. `#lists`:用于处理列表操作的工具类。
12. `#sets`:用于处理集合操作的工具类。
13. `#maps`:用于处理映射操作的工具类。
通过使用这些内置对象,你可以在 Thymeleaf 模板中方便地进行数据处理和操作。
相关问题
Thymeleaf 的内置对象
### Thymeleaf 内置对象概述
Thymeleaf 提供了一系列内置对象,可以直接在模板中调用并使用。这些内置对象通常以 `#` 开头,并且大多数名称以 `s` 结尾,例如 `#strings`, `#numbers`, 和 `#dates` 等。以下是常见的内置对象及其功能介绍:
#### 1. **字符串处理工具 (#strings)**
该工具提供了多种方法来操作字符串。常用的功能包括但不限于:
- 判断字符串是否为空:`#strings.isEmpty(str)` 或 `#strings.isBlank(str)`[^1]
- 字符串长度获取:`#strings.length(str)`
- 转换大小写:`#strings.toUpperCase(str)` / `#strings.toLowerCase(str)`
示例代码:
```html
<p th:text="#{strings.isEmpty('')} ? 'Empty' : 'Not Empty'"></p>
<!-- 输出: Empty -->
```
---
#### 2. **数值处理工具 (#numbers)**
此工具主要用于格式化数字以及执行基本的数值运算。常用的函数有:
- 数字格式化:`#numbers.formatDecimal(number, integerDigits, fractionDigits)`[^1]
- 将科学计数法转换为标准形式:`#numbers.fromScientificNotation(scientificNumber)`
示例代码:
```html
<p th:text="#{numbers.formatDecimal(12345.6789, 0, 2)}"></p>
<!-- 输出: 12345.68 -->
```
---
#### 3. **日期时间处理工具 (#dates/#calendars/#temporals)**
这一组工具专门用于日期和时间的操作。具体来说:
- 获取当前日期:`#temporals.now()`[^1]
- 格式化日期:`#temporals.format(date, pattern)`
- 解析日期字符串:`#temporals.parse(textDate, pattern)`
示例代码:
```html
<p th:text="#{temporals.format(temporalObject, 'yyyy-MM-dd HH:mm:ss')}"></p>
<!-- 输出: 当前时间按指定格式展示 -->
```
---
#### 4. **集合与数组工具 (#arrays/#lists/#sets/#maps)**
这些工具可以方便地操作 Java 集合或数组类型的变量。主要功能包括:
- 检查集合是否为空:`#lists.isEmpty(list)`[^1]
- 访问特定索引位置的数据:`#arrays.toArray(array)[index]`
- 合并多个列表:`#lists.concat(listA, listB)`
示例代码:
```html
<ul>
<li th:each="item : ${list}" th:text="${item}">Item</li>
</ul>
```
---
#### 5. **布尔逻辑工具 (#bools)**
支持简单的布尔值判断操作。比如:
- 判断两个布尔值是否相等:`#bools.isTrue(boolValue)`[^1]
示例代码:
```html
<p th:text="#{bools.isTrue(true)} ? 'True' : 'False'"></p>
<!-- 输出: True -->
```
---
#### 6. **条件表达式工具 (#executions)**
允许动态构建 OGNL 表达式的部分片段。虽然不常单独使用,但在复杂场景下非常有用。
---
#### 7. **其他实用工具**
除了以上提到的主要类别外,还有许多辅助性的工具可供选择,例如 URL 构建器 (`@{...}`),正则匹配 (`#regex`) 等[^5]。
---
### 实际应用场景举例
假设有一个用户实体类 `User` 包含字段 `id`, `name`, 和 `age`,可以通过以下方式利用内置对象完成一些基础业务需求:
```java
@Controller
public class UserController {
@GetMapping("/users")
public String showUsers(Model model) {
List<User> users = Arrays.asList(
new User(1, "Alice", 30),
new User(2, "Bob", 25)
);
model.addAttribute("users", users);
return "userList";
}
}
```
对应的 HTML 文件内容如下所示:
```html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8"/>
<title>User List</title>
</head>
<body>
<h1>User Information</h1>
<table border="1">
<thead>
<tr>
<th>ID</th><th>Name</th><th>Age (Formatted)</th>
</tr>
</thead>
<tbody>
<tr th:each="user : ${users}">
<td th:text="${user.id}">ID</td>
<td th:text="${user.name}">Name</td>
<td th:text="${#numbers.formatInteger(user.age, 10, '#')}" />
</tr>
</tbody>
</table>
</body>
</html>
```
---
Thymeleaf 的内置对象#request
### Thymeleaf 内置对象 `#request` 的用法及功能
在 Thymeleaf 模板引擎中,`#request` 是一个专门用于访问 HTTP 请求 (`HttpServletRequest`) 对象的内置工具变量[^2]。它使得开发者能够在模板层面上直接获取与当前请求相关的各种信息,而无需额外传递这些数据到视图模型中。
#### 功能概述
以下是 `#request` 常见的功能及其应用场景:
1. **获取请求参数**
利用 `${#request.getParameter(String name)}` 方法可以从 GET/POST 请求中提取指定名称的单个参数值[^4]。
示例代码片段:
```html
<span th:text="${#request.getParameter('username')}">默认用户名</span>
```
2. **检索所有请求参数集合**
如果需要一次性获得所有的请求参数映射关系(即键值对),则可以调用 `${#request.getParameterMap()}` 函数来返回 Map<String, String[]> 类型的结果集[^4]。
示例代码片段:
```html
<ul>
<li th:each="entry : ${#request.getParameterMap().entrySet()}"
th:text="'Key=' + entry.key + ', Value(s)=' + entry.value">
</li>
</ul>
```
3. **查询请求头字段**
通过 `${#request.getHeader(String name)}` 接口能够方便快捷地拿到客户端发送过来的任意头部信息项[^4]。
示例代码片段:
```html
<p>User-Agent Header: <span th:text="${#request.getHeader('User-Agent')}"></span></p>
```
4. **判定请求方法类型**
开发者还可以借助 `${#request.getMethod()}` 来确认当前正在处理的是哪种类型的 HTTP 请求 (GET、POST 等)[^4]。
示例代码片段:
```html
<p>Request Method Type: <span th:text="${#request.getMethod()}"></span></p>
```
5. **定位远程地址**
此外,`${#request.getRemoteAddr()}` 提供了一种简单的方式来识别发起此次连接的实际 IP 地址。
示例代码片段:
```html
<p>Client Remote Address: <span th:text="${#request.getRemoteAddr()}"></span></p>
```
6. **其他常用 API**
- `${#request.getRequestURI()}` 返回不含上下文路径的部分 URL;
- `${#request.getContextPath()}` 得知应用部署的基础路径前缀;
- `${#request.getServerName()}` 显示承载服务主机名等更多实用特性均可被灵活运用至实际开发当中去。
#### 注意事项
尽管 `#request` 提供了许多便利之处,但在使用过程中也需注意以下几点:
- 这些操作仅限于 Web 环境有效,在非 Web 工作流里尝试访问它们可能会抛出异常情况;
- 尽管可以直接从模板内部读取原始输入源里的资料,但为了遵循 MVC 设计模式原则并增强代码可维护性,建议尽量减少这种做法频率,转而在 Controller 层面做好前期准备工作再传送给 View 层展现即可[^3]。
---
### 总结
综上所述,Thymeleaf 的 `#request` 内置对象极大地简化了前端页面对于后台运行时动态生成内容的需求满足过程,同时也保留足够的灵活性让程序员可以根据实际情况做出最佳选择方案[^2]。
阅读全文
相关推荐














