Thymeleaf遍历数组时如何判断当前是否为最后一个元素
Thymeleaf遍历判断最后一个元素的实现方法
核心原理
Thymeleaf 的 th:each 语法内置了隐式的迭代状态对象,无需额外计算集合长度、手动比对索引,就可以直接获取当前迭代的位置属性,其中最常用的判断标记包括:
first:布尔值,标记当前是否为第一轮迭代last:布尔值,标记当前是否为最后一轮迭代,正好匹配判断最后一个元素的需求count:当前迭代的轮次,从1开始计数size:被遍历集合的总长度
适配当前校验错误输出场景的修改方案
你可以在原有 th:each 语法后追加自定义的状态变量名,基于 last 标记切换输出的标点,替换原有的固定追加逗号的逻辑。
改后代码示例
<!-- err 是遍历到的单条错误信息,iterStat 是自定义的迭代状态变量 --> <th:block th:each="err, iterStat : ${#fields.errors('confirmedPassword')}"> <span th:text="${err}"></span> <!-- 最后一条错误后输出句号,其余错误后输出逗号 --> <span th:text="${iterStat.last} ? '。' : ','"></span> </th:block>
如果习惯使用 Thymeleaf 的内联输出语法,也可以写成更简洁的形式:
<th:block th:each="err, iterStat : ${#fields.errors('confirmedPassword')}"> [[${err}]][[${iterStat.last ? '。' : ','}]] </th:block>
补充说明
- 不手动定义状态变量名也可以使用默认状态对象:Thymeleaf 会自动以「迭代变量名 + Stat」作为默认状态对象的名称,比如迭代变量叫
err时,直接用errStat.last也可以拿到对应的标记,但这种隐式写法可读性较差,团队协作时更推荐显式定义状态变量。 - 当校验错误集合为空时,整套逻辑不会触发迭代,自然不会输出多余的标点,不需要额外做空判断。
内容的提问来源于stack exchange,提问作者Bu Saeed
相关产品推荐
相关产品推荐

