Skip to content

禁用内联(Disabling inlining)

虽然表达式内联默认是激活的,但在某些场景下,你需要输出 [[...]][(...)] 这些字符本身(而非解析为表达式),此时可以通过 th:inline="none" 禁用指定区域的内联解析机制。

html
<!-- 禁用内联,[[1,2,3], [4,5]] 仅作为普通文本显示 -->
<p th:inline="none">A double array looks like this: [[1, 2, 3], [4, 5]]!</p>

最终渲染结果(保留 [[...]] 字符,无解析):

html
<p>A double array looks like this: [[1, 2, 3], [4, 5]]!</p>

如果不添加 th:inline="none",Thymeleaf 会尝试将 [[1, 2, 3], [4, 5]] 解析为表达式,最终因表达式不合法导致渲染错误或异常。

关键规则

  1. 作用域th:inline="none" 的禁用效果仅作用于当前标签及其所有子标签,不会影响其他标签:

    html
    <!-- 该 p 标签内禁用内联 -->
    <p th:inline="none">[[1,2]] 是普通文本</p>
    <!-- 该 span 标签内仍启用内联,会解析表达式 -->
    <span>[[${user.name}]]</span>
  2. 其他内联模式(补充)th:inline 除了 none,还有两个常用值(虽未在当前示例中提及,但需了解):

    • text:显式激活文本内联(默认状态,无需手动设置);
    • javascript/css:激活 JS/CSS 内联(后续会接触)。
  3. 禁用的必要性: 当文本中包含 [[/]]/[(]/)] 这些内联标识字符,且这些字符是业务需要展示的内容(如代码示例、数学公式、数组格式说明)时,必须禁用内联,否则会被 Thymeleaf 误解析为表达式,导致:

    • 表达式语法错误(如上述数组示例);
    • 非预期的渲染结果(如把 [[user]] 解析为变量 ${user})。

典型使用场景

  • 展示代码片段:如文档页面中展示 JSON/数组格式、Thymeleaf 语法示例;
  • 数学/公式表达:如 [[a+b]] 作为数学公式展示,而非表达式;
  • 业务文本包含特殊字符:如产品描述、用户输入内容中包含 [[...]] 字符。

总结

  1. th:inline="none" 用于禁用指定标签内的表达式内联解析,让 [[...]]/[(...)] 作为普通文本输出;
  2. 作用域为当前标签及其子标签,不会影响其他区域的内联功能;
  3. 核心适用场景:文本中包含内联标识字符,且需要原样展示这些字符时。