Thymeleaf 注释和块

1. 标准 HTML/XML 注释

标准HTML / XML注释<!-- ... -->可以在Thymeleaf模板中的任何位置使用。Thymeleaf将不会处理这些评论中的任何内容,并将逐字复制到结果中:

<!-- User info follows -->
<div th:text="${...}">
  ...
</div>

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>
<!--*/-->

对于具有大量原型的表进行原型设计,这可能非常方便

,例如:

<table>
   <tr th:each="x : ${xs}">
     ...
   </tr>
   <!--/*-->
   <tr>
     ...
   </tr>
   <tr>
     ...
   </tr>
   <!--*/-->
</table>

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>

与解析器级注释块一样,此功能与方言无关。

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>),并且在浏览器中作为原型静态打开时仍然可以正常工作!

下一章:Thymeleaf 内联

1. 表达内联虽然标准方言允许我们使用标记属性来完成几乎所有操作,但在某些情况下我们可能更喜欢将表达式直接编写到HTML文本中。例如,我们可能更喜欢这样写:<p>Hello, [[${session.u ...