Thymeleaf模板中的任何位置都可以使用标准的HTML / XML注释 <!-- ... -->。这些注释中的所有内容均不会被Thymeleaf处理,并将一字不差的复制到结果页面:
<!-- User info follows -->
<div th:text="${...}">
...
</div>
Thymeleaf解析器级注释块
解析器级别的注释块是在Thymeleaf对其进行解析时,将从模板中简单删除的代码。他们看起来像这样:
<!--/* This code will be removed at Thymeleaf parsing time! */-->
Thymeleaf将删除 <!--/* 和 */--> 之间的所有内容,因此,当模板静态打开时,这些注释块也可用于显示代码,因为Thymeleaf在处理模板时会将其删除:
<!--/*-->
<div>
you can see me only before Thymeleaf processes me!
</div>
<!--*/-->
例如,对于带有很多 <tr> 的表格进行原型制作可能会非常方便:
<table>
<tr th:each="x : ${xs}">
...
</tr>
<!--/*-->
<tr>
...
</tr>
<tr>
...
</tr>
<!--*/-->
</table>
Thymeleaf仅原型注释块
Thymeleaf允许定义特殊注释块,当模板静态打开(即作为原型)时,标记为注释,但Thymeleaf在执行模板时将其视为正常标记。
<span>hello!</span>
<!--/*/
<div th:text="${...}">
...
</div>
/*/-->
<span>goodbye!</span>
Thymeleaf的解析系统将仅删除 <!--/*/ 和 /*/-->标记,但不会删除其内容,因此不会对其进行注释。因此,在执行模板时,Thymeleaf实际上会看到以下内容:
<span>hello!</span>
<div th:text="${...}">
...
</div>
<span>goodbye!</span>
与解析器级注释块一样,此功能与方言无关。
th:block标签
Thymeleaf的标准方言中唯一的元素处理器(不是属性)是 th:block。
th:block 仅是一个属性容器,允许模板开发人员指定所需的任何属性。Thymeleaf将执行这些属性,然后简单地使该块(而不是其内容)消失。
因此,例如在创建 <tr> 每个表都需要多个表的迭代表时,它可能会很有用:
<table>
<th:block th:each="user : ${users}">
<tr>
<td th:text="${user.login}">...</td>
<td th:text="${user.name}">...</td>
</tr>
<tr>
<td colspan="2" th:text="${user.address}">...</td>
</tr>
</th:block>
</table>
与仅原型注释块结合使用时特别有用:
<table>
<!--/*/ <th:block th:each="user : ${users}"> /*/-->
<tr>
<td th:text="${user.login}">...</td>
<td th:text="${user.name}">...</td>
</tr>
<tr>
<td colspan="2" th:text="${user.address}">...</td>
</tr>
<!--/*/ </th:block> /*/-->
</table>
请注意,此解决方案如何使模板成为有效的HTML(无需在 <table> 内添加隐藏的<div>),并且当在浏览器中作为原型静态打开时,仍可以正常使用!
公众号回复以下关键字,获取更多资源
SpringCloud进阶之路 | Java 基础 | 微服务 | JAVA WEB | JAVA 进阶 | JAVA 面试 | MK 精讲
笔者开通了个人微信公众号【银河架构师】,分享工作、生活过程中的心得体会,填坑指南,技术感悟等内容,会比博客提前更新,欢迎订阅。