Skip to content

表达式基础对象

在上下文变量上执行 OGNL 表达式时,Thymeleaf 会提供一些内置对象来提升表达式的灵活性。按照 OGNL 标准,这些对象需以 # 符号开头引用:

基础对象含义
#ctx上下文对象(IContext)
#vars上下文变量映射表
#locale上下文的语言环境

我们可以这样使用这些对象:

html
Established locale country: <span th:text="${#locale.country}">US</span>.

这段代码会渲染出当前上下文 Locale 对应的国家代码(比如 ES 代表西班牙、CN 代表中国),静态原型中默认显示 US

关于这些对象的完整说明,可参考附录 A

核心语法解释

  1. # 符号的意义: OGNL 中 # 用于标识“上下文内置对象”,区别于开发者自定义的变量(如 ${today} 是自定义变量,${#locale} 是内置对象)。
  2. 各基础对象的实用场景
    • #ctx:可直接访问上下文的核心方法,如 ${#ctx.getLocale()}(等价于 ${#locale})、${#ctx.containsVariable('today')}(判断是否存在 today 变量);
    • #vars:等价于上下文的变量映射表,${#vars.today} 完全等价于 ${today}
    • #locale:最常用的场景是获取语言/国家信息(#locale.language 得到语言代码如 zh/en#locale.country 得到国家代码如 CN/US),用于动态适配多语言逻辑。
  3. 与 Web 上下文的结合: 在 Web 环境中(WebContext),还会额外提供 #request(请求对象)、#session(会话对象)等扩展基础对象,后续会详细讲解。

总结

  1. Thymeleaf 为 OGNL 表达式提供了 #ctx/#vars/#locale 等内置基础对象,以 # 开头引用,提升表达式的灵活性。
  2. #locale 是最常用的基础对象,可快速获取当前语言环境的国家/语言代码,适配多语言场景。
  3. 所有基础对象的完整用法可参考附录 A,核心场景下只需掌握 #locale 的基本使用即可。