Skip to content

12.2 文本内联

文本内联与我们刚才看到的表达式内联功能非常相似,但实际上更加强大。它需要通过 th:inline="text" 属性显式启用。

文本内联不仅允许我们使用刚才所见的相同内联表达式,更重要的是,它会将标签体按照 TEXT模板模式 来处理,这意味着我们可以在其中执行基于文本的模板逻辑(而不仅仅是输出表达式)。

关于文本模板模式的更多细节,我们将在下一章详细讨论。

核心特性

对比维度普通表达式内联文本内联(th:inline="text")
激活方式默认激活需显式添加 th:inline="text"
核心能力仅支持表达式输出支持表达式输出 + 文本模板逻辑
模板模式HTML 模式TEXT 模板模式(纯文本处理逻辑)

基础用法:显式激活文本内联

html
<!-- 显式激活文本内联 -->
<p th:inline="text">
  Hello, [[${session.user.name}]]!
  Today is [[${#calendars.format(today, 'yyyy-MM-dd')}]].
</p>

表面上看,这段代码和普通表达式内联效果一致,但背后的处理逻辑不同:

  • 普通表达式内联:仅解析 [[...]] 表达式,其余文本按 HTML 模式处理;
  • 文本内联:整个 <p> 标签体按 TEXT 模板模式处理,除了表达式,还能支持 TEXT 模式特有的逻辑(如条件、遍历的文本写法)。

关键优势:支持文本模板逻辑(提前预览)

TEXT 模板模式是 Thymeleaf 针对纯文本(非 HTML)的处理模式,文本内联让你能在 HTML 标签体中使用这种模式的逻辑。例如(后续章节会详细讲解):

html
<!-- 文本内联中使用 TEXT 模式的条件逻辑 -->
<div th:inline="text">
  [[#if user.isAdmin()]]
    Welcome, admin [[${user.name}]]!
  [[#else]]
    Welcome, [[${user.name}]]!
  [[/if]]
</div>

这段代码的核心是:在 HTML 标签内,用 TEXT 模式的语法([[#if]]/[[/if]])实现条件逻辑,无需嵌套 <th:block th:if>,更适合纯文本场景的逻辑编写。

重要规则

  1. 显式激活:必须给标签添加 th:inline="text" 才能启用文本内联,否则仅会按普通表达式内联处理;
  2. 作用域:激活后仅作用于当前标签的文本内容,标签属性仍按 HTML 模式处理;
  3. 与 HTML 转义的兼容
    • [[...]] 仍对应 HTML 转义(同 th:text);
    • [(...)] 仍对应不转义(同 th:utext);
  4. 原型友好性:和普通表达式内联一样,文本内联的代码在静态预览时会显示 [[...]] 表达式,破坏原生模板的预览效果,需谨慎使用。

适用场景

  • 纯文本逻辑场景:如生成动态文本、邮件模板、纯文本响应等,需要在文本中嵌入复杂逻辑;
  • 简化文本内的逻辑编写:替代嵌套的 th:if/th:each 标签,用 TEXT 模式的简洁语法实现逻辑。

总结

  1. 文本内联(th:inline="text")是表达式内联的增强版,需显式激活,支持 TEXT 模板模式的文本逻辑;
  2. 核心价值:在 HTML 标签体中使用纯文本风格的模板逻辑,简化文本内的条件、遍历等编写;
  3. 代价:同样会丧失原生模板的静态预览友好性,仅适用于无需静态预览的纯文本逻辑场景。