Thymeleaf List指定数量循环

目录
  1. 问题
  2. 解决

问题

项目使用Thymeleaf模板,后端查询10条数据,但根据不同页面可能会显示其中3条或5条。因此有了List指定数量循环的需求,数量由模板决定,而非后端。

解决

不知道是不是搜索关键字的问题还是问题太简单的原因,网上找到一些都是这种

1
${#numbers.sequence(0,3)}

通过Thymeleaf numbers函数进行截取的解决方案。此方案对本项目不适用,因为它要求传入的数据模型就是List,函数会直接截取该List,而项目使用的是更复杂的Map对象。
看了一下Thymeleaf文档,可以使用List的状态变量加以判断来解决这种问题。

1
2
3
4
<div th:text="${title}">标题</div>
<div class="column" th:each="item,itemStat : ${testList}" th:if="${itemStat.count}<=3">
<div th:text="${item.name}"></div>
</div>

以上代码使得无论testList实际有多长,最多只有前3个会被使用到。

其中th:each第二个变量就是迭代的状态变量,本文命名的是itemStat。状态变量有如下属性:
index: 当前迭代索引,从0开始。
count: 当前迭代索引,从1开始。
size: 迭代变量中的元素总数。
current: 每个迭代的iter变量, 和本文中的item一样。
even/odd: 当前迭代是偶数还是奇数,布尔值。
first: 在当前的迭代中是否是第一个,布尔值。
last: 在当前的迭代中是否是最后一个,布尔值。

使用 th:if 加 count比较 即可约束后续内容显示。

Thymeleaf相关链接:

Thymeleaf SAXParseException
Thymeleaf实现页面静态化
Thymeleaf TemplateProcessingException
Thymeleaf比较判断枚举类型