深色模式
表达式基础对象
在上下文变量上执行 OGNL 表达式时,Thymeleaf 会提供一些内置对象来提升表达式的灵活性。按照 OGNL 标准,这些对象需以 # 符号开头引用:
| 基础对象 | 含义 |
|---|---|
#ctx | 上下文对象(IContext) |
#vars | 上下文变量映射表 |
#locale | 上下文的语言环境 |
我们可以这样使用这些对象:
html
Established locale country: <span th:text="${#locale.country}">US</span>.这段代码会渲染出当前上下文 Locale 对应的国家代码(比如 ES 代表西班牙、CN 代表中国),静态原型中默认显示 US。
关于这些对象的完整说明,可参考附录 A。
核心语法解释
#符号的意义: OGNL 中#用于标识“上下文内置对象”,区别于开发者自定义的变量(如${today}是自定义变量,${#locale}是内置对象)。- 各基础对象的实用场景:
#ctx:可直接访问上下文的核心方法,如${#ctx.getLocale()}(等价于${#locale})、${#ctx.containsVariable('today')}(判断是否存在today变量);#vars:等价于上下文的变量映射表,${#vars.today}完全等价于${today};#locale:最常用的场景是获取语言/国家信息(#locale.language得到语言代码如zh/en,#locale.country得到国家代码如CN/US),用于动态适配多语言逻辑。
- 与 Web 上下文的结合: 在 Web 环境中(
WebContext),还会额外提供#request(请求对象)、#session(会话对象)等扩展基础对象,后续会详细讲解。
总结
- Thymeleaf 为 OGNL 表达式提供了
#ctx/#vars/#locale等内置基础对象,以#开头引用,提升表达式的灵活性。 #locale是最常用的基础对象,可快速获取当前语言环境的国家/语言代码,适配多语言场景。- 所有基础对象的完整用法可参考附录 A,核心场景下只需掌握
#locale的基本使用即可。
