深色模式
Web上下文命名空间(用于请求/会话属性等)
在 Web 环境中使用 Thymeleaf 时,你可以通过一系列快捷命名空间来访问请求参数、会话属性和应用上下文属性:
INFO
需要注意的是:这些并非上下文对象,而是以变量形式添加到上下文的 Map 集合,因此访问时无需加 # 符号。从功能上看,它们相当于一组“命名空间”。
1. param:获取请求参数
${param.foo} 会返回一个 String[] 数组,包含请求参数 foo 的所有值,因此通常用 ${param.foo[0]} 获取第一个值。
/*
* ============================================================================
* 可参考 API 文档:org.thymeleaf.context.WebRequestParamsVariablesMap
* ============================================================================
*/
${param.foo} // 获取请求参数 'foo' 的值(String[] 类型)
${param.size()} // 获取请求参数的总数
${param.isEmpty()} // 判断是否有请求参数
${param.containsKey('foo')} // 判断是否存在 'foo' 这个请求参数
...2. session:获取会话(Session)属性
/*
* ======================================================================
* 可参考 API 文档:org.thymeleaf.context.WebSessionVariablesMap
* ======================================================================
*/
${session.foo} // 获取会话属性 'foo' 的值
${session.size()} // 获取会话属性的总数
${session.isEmpty()} // 判断会话中是否有属性
${session.containsKey('foo')} // 判断会话中是否存在 'foo' 属性
...3. application:获取应用/ Servlet 上下文属性
/*
* =============================================================================
* 可参考 API 文档:org.thymeleaf.context.WebServletContextVariablesMap
* =============================================================================
*/
${application.foo} // 获取 ServletContext 属性 'foo' 的值
${application.size()} // 获取 ServletContext 属性的总数
${application.isEmpty()} // 判断 ServletContext 中是否有属性
${application.containsKey('foo')} // 判断 ServletContext 中是否存在 'foo' 属性
...需要注意的是:访问请求属性(request attributes) 时无需指定命名空间(与请求参数区分开)——因为所有请求属性都会被自动添加到上下文根节点作为变量,直接访问即可:
html
${myRequestAttribute} // 直接获取名为 myRequestAttribute 的请求属性补充示例
为了让你更直观理解,以下是在模板中使用这些命名空间的完整示例:
html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<body>
<!-- 获取请求参数:比如URL为?username=张三 时,显示“张三” -->
<p>请求参数username:<span th:text="${param.username[0]}">默认值</span></p>
<!-- 获取会话属性:比如登录后存入session的用户ID -->
<p>会话中的用户ID:<span th:text="${session.userId}">1001</span></p>
<!-- 获取应用上下文属性:比如全局配置的网站名称 -->
<p>网站名称:<span th:text="${application.siteName}">虚拟杂货店</span></p>
<!-- 直接获取请求属性:比如控制器中model.addAttribute("msg", "欢迎") -->
<p>请求属性msg:<span th:text="${msg}">默认欢迎语</span></p>
</body>
</html>总结
- Web 环境下 Thymeleaf 提供
param/session/application三个快捷命名空间(本质是 Map 变量),无需#即可访问对应作用域的属性; param对应请求参数(返回数组),session对应会话属性,application对应应用上下文属性;- 请求属性(request attributes)无需命名空间,可直接通过变量名访问,是最常用的页面传值方式。
