在Thymeleaf中连续计算嵌套循环项

时间:2015-01-30 13:16:13

标签: java thymeleaf

我正在编写一个应该呈现员工列表的模板。员工以部门名单的形式传递给Thymeleaf,每个部门都有自己的员工名单。

我的任务是展示它们 - 问题是处理连续的计算。每个员工都应该显示为下一个号码的行。

以下尝试允许为给定部门的员工编制索引,每个部门都有新的编号:

<table th:each="department, depStatus : departmentList">
    <tr th:each="employee, empStatus : department.employees">
        <td th:inline="text">[[${empStatus.index+1}]]</td>

但我的意思是通过所有部门保持连续计算,就像这样:

1. Employee A from Dept X
2. Employee B from Dept X
3. Employee C from Dept Y

我知道我可以在服务器端使这个结构平坦,但我无法相信这是唯一的方法。

我还尝试使用th:with="idx = 0"来引入局部变量,然后使用th:with="idx = ${idx} + 1将其递增到某处,但这只会覆盖idx值。{/ p>

3 个答案:

答案 0 :(得分:4)

您要实现的目标是更新局部变量,并使新值在比更新更广泛的范围内可见。这就是为什么它与定义相矛盾的原因。 我认为您无法避免进行某些服务器端调整,例如根据您的建议提供一些更平坦的结构视图。

另一方面,一个快速的解决方案,(假设你不是严格意义上使用一个表),它可能在使用th:block为封闭部门时尝试一个有序列表:

<ol>
  <!--/*/ <th:block th:each="dept : ${departmentList} "> /*/-->

   <li th:each="emp : dept.employees" th:text="|${emp.name} from ${dept.name}|"></li>

  <!--/*/ </th:block> /*/-->
</ol>  

答案 1 :(得分:1)

    <div th:each="department : ${departmentList}">
        <div th:each="employee : ${department.employees}">
            <div th:text="${#ids.seq ('')}"></div>
        </div>
    </div>

查看文档 https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#ids

感谢https://www.tutorialfor.com/questions-69803.htm

答案 2 :(得分:0)

对于任何与循环相关的操作,您应该能够使用iterationStatus实用程序

查看以下代码以显示迭代项的索引。

 <tr th:each="emp,iterStat : ${employess}">
        <td th:text="${iterStat.count}"></td>
        <td th:text="${emp.name}"></td>
        <td th:text="${emp.department}"></td>
  </tr>