您的位置:

Thymeleaf循环详解

Thymeleaf是一款服务器端的Java模板引擎,适用于Web和独立环境。它的设计着重于开发的高效性和可读性。循环是Thymeleaf中最常用的功能之一,它使得在模板中表现数据变得更加简单和直观。本篇文章将从多个方面介绍Thymeleaf循环的使用。

一、List的循环

循环List是Thymeleaf中最常用和基础的循环之一,它能够快速地遍历List中所有元素,并将每个元素展示在模板中。下面是List循环的代码示例:

<table>
  <thead>
    <tr>
      <th>Name</th>
      <th>Age</th>
      <th>Phone</th>
    </tr>
  </thead>
  <tbody>
    <tr th:each="person : ${people}">
      <td th:text="${person.name}">Name</td>
      <td th:text="${person.age}">Age</td>
      <td th:text="${person.phone}">Phone</td>
    </tr>
  </tbody>
</table>

在上述代码中,我们使用了th:each指令来循环遍历people这个List。而在循环体中,使用th:text指令将person对象中的name、age和phone属性输出到HTML表格中对应的单元格中。

二、数组的循环

除了List以外,数组也是Thymeleaf中常用的循环对象。它的使用方式与List类似,下面是数组循环的代码示例:

<div th:each="num : ${numbers}">
  <span th:text="${num}">1</span>
</div>

与List循环不同的是,数组循环中的变量需要使用“:”符号,如“num : ${numbers}”中的“num”就是循环体中的变量。同时,循环体中需要使用th:text指令将数组元素输出到HTML中。

三、循环语法

Thymeleaf的循环语法比较简单,只需要使用th:each指令即可完成循环。该指令的语法如下:

th:each="item : ${list}"

其中,“item”是循环体中的变量名,“${list}”是要循环遍历的对象。当多重循环时,可以添加多个th:each指令,如:

<div th:each="group : ${groups}">
  <h2 th:text="${group.name}">Group</h2>
  <ul>
    <li th:each="person : ${group.people}">
      <span th:text="${person.name}">Name</span>, 
      <span th:text="${person.age}">Age</span>, 
      <span th:text="${person.phone}">Phone</span>
    </li>
  </ul>
</div>

上述代码中,我们展示了如何在模板中进行多重循环。我们首先使用th:each指令遍历groups,接着在循环体中使用th:each指令遍历group对象中的people。最后,将人员信息输出到HTML中。

四、遍历序号

在一些场景下,可能需要在循环过程中累加计数。Thymeleaf提供了th:each指令中的“index”和“count”变量,用于记录当前元素的位置和累加的计数。下面是如何使用这两个变量的代码示例:

<div th:each="person, index : ${people}">
  <p th:text="${index.count}+' - '+${person.name}">1 - John Smith</p>
</div>

在上述代码中,我们使用“index.count”和“index.index”分别表示当前元素的累计数量和位置。同时,我们结合使用th:text指令输出当前元素的位置和name属性。

五、遍历次数

在一些场景下,可能需要在循环结束后统计出循环的次数。Thymeleaf提供了th:count指令来实现该功能。该指令的语法如下:

th:count="${{datas.list.size()}}"

其中,“${{datas.list.size()}}”表示需要统计的循环次数。使用该指令时,需要开启thymeleaf的“thymeleaf-extras-java8time”扩展包。下面是使用th:count指令的代码示例:

<div th:each="person : ${people}">
  <p th:text="${person.name}" th:count="${{people.size()}}">John Smith</p>
</div>

在上述代码中,我们使用th:count指令将循环的次数统计出来,并使用th:text指令输出了person对象中的name属性。

六、无序列表的遍历

除了在表格中展示数据外,循环可能在其他场景下也是很有用的。下面是如何使用Thymeleaf循环遍历无序列表的代码示例:

<ul>
  <li th:each="item : ${items}">
    <span th:text="${item}">List Item</span>
  </li>
</ul>

在上述代码中,我们使用th:each指令遍历items,并在循环体中将每个元素都展示为一个列表项。

七、循环生成指定的标签

循环不仅可以用来展示数据,还可以用来生成HTML标签。下面是如何使用Thymeleaf循环来生成指定标签的代码示例:

<th:block th:each="i : ${#numbers.sequence(1,5)}">
   <th:block th:text="${i}" th:tag="${'h'+i}">1</th:block>
</th:block>

在上述代码中,我们使用th:each指令遍历1-5的数值,并结合th:text和th:tag指令生成了h1-h5标签。

八、使用Map进行循环

除了List和数组,Thymeleaf中还支持使用Map进行循环。下面是如何使用Map进行循环的代码示例:

<ul>
  <li th:each="value : ${map}">
    <span th:text="${value.key}">Key</span>: 
    <span th:text="${value.value}">Value</span>
  </li>
</ul>

在上述代码中,我们使用th:each指令遍历map,并使用th:text指令将key和value输出到HTML中。