11、注释和块(Comments and Blocks)
总结:
-
只要是在
<!--
和-->
之间的内容,静态打开都不会显示。 -
<!--/*内容*/-->
称为Thymeleaf解析器注释块(thymeleaf会删除内容和标签(<!--/*
和*/-->
)),根据上条,内容一样不会显示,但是可以这么用:<!--/*--> <div> you can see me only before Thymeleaf processes me! </div> <!--*/-->
就实现了静态打开显示中间的div,而thmeleaf会全部删除。
-
<!--/*/内容/*/-->
称为Thymeleaf仅原型注释块(会删除标签(<!--/*/
和\*\-->
),但是不会删除内容) -
仅原型注释块和
<th:block></th:block>
结合使用,就实现了静态打开时显示静态的,thmeleaf打开时替换静态的。
11.1、标准HTML/XML注释
<!-- ... -->
Thymeleaf模板中的任何位置都可以使用标准的HTML / XML注释。这些注释中的所有内容都不会被Thymeleaf处理,并将逐字复制到结果中:
<!-- User info follows -->
<div th:text="${...}">
...
</div>
11.2、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>
11.3、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>
与解析器级注释块一样,此功能与方言无关。
11.4、合成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(无需<div>
在内添加禁止块<table>
),并且当在浏览器中作为原型静态打开时,仍可以正常使用!