深色模式
19 附录 B:表达式工具对象
执行信息
#execInfo 是 Thymeleaf 标准表达式中的工具对象,用于获取当前正在处理的模板的各类关键执行信息,其底层对应 org.thymeleaf.expression.ExecutionInfo 类。
java
/*
* ======================================================================
* 请查阅 org.thymeleaf.expression.ExecutionInfo 类的 Javadoc API 文档
* ======================================================================
*/
/*
* 返回「叶子模板(leaf)」的名称和模式。这里的叶子模板指的是:
* 当前正在处理的事件所解析自的那个模板。也就是说,如果这段代码
* 并非位于根模板"A"中,而是在一个从另一个名为"B"的模板插入到"A"的片段里,
* 那么该表达式会返回"B"作为模板名称,同时返回B的模板模式。
*/
${#execInfo.templateName}
${#execInfo.templateMode}
/*
* 返回「根模板(root)」的名称和模式。这里的根模板指的是:
* 模板引擎最初被要求处理的那个模板。也就是说,即便这段代码
* 不在根模板"A"中,而是在从模板"B"插入到"A"的片段里,
* 该表达式仍会返回"A"作为模板名称,并返回A的模板模式。
*/
${#execInfo.processedTemplateName}
${#execInfo.processedTemplateMode}
/*
* 返回正在处理的所有模板的栈信息(实际类型为 List<String> 或 List<TemplateMode>)。
* 栈中第一个元素是「已处理模板(processedTemplate)」(即根模板),
* 最后一个元素是「叶子模板(leaf)」;栈中间的元素则是所有以嵌套方式插入的片段模板——
* 这些片段是从根模板到叶子模板的路径中被引入的。
*/
${#execInfo.templateNames}
${#execInfo.templateModes}
/*
* 以与 'templateNames' 和 'templateModes' 相同的方式(且顺序一致)
* 返回正在处理的模板栈,但返回值是包含完整模板元数据的 List<TemplateData> 类型。
*/
${#execInfo.templateStack}补充说明(贴合 Thymeleaf 技术语境)
1. 核心术语解析
| 英文术语 | 译法/说明 |
|---|---|
| leaf template | 叶子模板(当前代码所在的实际模板,即“最底层”模板) |
| root template | 根模板(模板引擎入口模板,即“最顶层”模板) |
| processed template | 已处理模板(等价于 root template,模板引擎最初触发处理的模板) |
| template mode | 模板模式(如 HTML/TEXT/JAVASCRIPT 等,Thymeleaf 对不同类型模板的解析规则) |
| template stack | 模板栈(模板嵌套调用的层级记录,按“根→中间片段→叶子”顺序存储) |
| TemplateData | 模板元数据类(包含模板名称、模式、资源路径等完整信息,Thymeleaf 内置类) |
| ExecutionInfo | 执行信息工具类(Thymeleaf 表达式工具,#execInfo 是其在模板中的简写) |
2. 关键逻辑解读
以“根模板 A 引入模板 B 的片段”为例:
#execInfo.templateName→ 返回 B(叶子模板,代码实际所在位置)#execInfo.processedTemplateName→ 返回 A(根模板,引擎入口)#execInfo.templateNames→ 返回[A, B](模板栈,从根到叶子的完整路径)
3. 句式优化说明
- 把原文长句拆分为符合中文阅读习惯的短句(如将
This means...拆为“这里的XX指的是:”),避免嵌套晦涩; - 补充“即”“也就是说”等连接词,强化“概念定义→举例说明”的逻辑;
- 保留
${#execInfo.xxx}表达式原样(技术规范),同时将注释中的英文注释转为流畅的中文技术描述; - 对“stack”译为“栈”(编程领域通用译法),并补充“层级记录”“顺序”等说明,避免新手误解。
总结
#execInfo核心作用:获取模板引擎处理过程中的模板层级信息,区分「根模板」和「叶子模板」是关键;- 核心属性分类:
- 叶子模板信息:
templateName/templateMode(当前代码所在模板); - 根模板信息:
processedTemplateName/processedTemplateMode(引擎入口模板); - 模板栈信息:
templateNames/templateModes(层级列表)、templateStack(含完整元数据的层级列表);
- 叶子模板信息:
- 适用场景:模板嵌套/片段引入时,精准获取当前代码所属模板或入口模板的信息(如日志打印、动态适配模板模式)。
