Skip to content

基础对象

#ctx:上下文对象

#ctx 是 Thymeleaf 的核心上下文对象,其具体实现类由运行环境决定:独立运行环境(非 Web):实现 org.thymeleaf.context.IContext 接口;Web 运行环境(如 Spring MVC):实现 org.thymeleaf.context.IWebContext 接口。

注意:#vars#root 是该对象的别名,功能完全一致,但官方推荐使用 #ctx(语义更清晰,便于维护)。

html
<!-- 请查阅 org.thymeleaf.context.IContext 类的 Javadoc API 文档。 -->
${#ctx.locale}
<!-- 获取上下文所有变量的名称(返回 Set<String> 集合) -->
${#ctx.variableNames}


<!-- 请查阅 org.thymeleaf.context.IWebContext 类的 Javadoc API 文档。 -->
<!-- 获取 HttpServletRequest 对象 -->
${#ctx.request}
<!-- 获取 HttpServletResponse 对象 -->
${#ctx.response}
<!-- 获取 HttpSession 对象 -->
${#ctx.session}
<!-- 获取 ServletContext(应用上下文)对象 -->
${#ctx.servletContext}

#locale 是访问当前请求关联的 java.util.Locale 对象的快捷方式,等价于 ${#ctx.locale},简化写法:

html
<!-- 直接获取当前语言环境 -->
${#locale}

核心解析

  1. 环境适配性#ctx 的能力随环境变化——非 Web 环境仅能获取语言、变量名等基础信息;Web 环境可直接操作 request/response/session 等 Servlet 核心对象,是模板与 Web 容器交互的核心入口。
  2. 别名的使用建议: 尽管 #vars/#root 可用,但 #ctx 是官方推荐写法(Context 的缩写,语义更直观),避免因别名导致代码理解成本增加。
  3. 典型应用场景
    • 判断语言环境:${#locale.language == 'zh'}(区分中英文文案);
    • 检查变量是否存在:${#ctx.containsVariable('user')}(避免空指针);
    • 获取请求路径:${#ctx.request.contextPath}(拼接绝对 URL)。

总结

  1. #ctx 是 Thymeleaf 表达式的核心上下文对象,实现类随运行环境(独立/Web)不同而变化;
  2. #locale#ctx.locale 的快捷方式,用于快速访问当前语言环境;
  3. #vars/#root#ctx 的别名,优先使用 #ctx 保证代码语义清晰;
  4. Web 环境下的 #ctx 可直接操作 Servlet 相关对象,是模板与 Web 容器交互的关键。