Thymeleaf嵌套列表/ ArrayList - 获取所有元素的总大小

时间:2014-10-01 23:22:36

标签: thymeleaf

列表有2个元素[0],[1]。

列表中的元素 - [0]在嵌套的ArrayList中有五个元素     [0] [1],[2],[3],[4],[5]

[1]有4个元素     [0],[1],[2],[3],[4]

如何在Thymeleaf中获得总长度/大小,即9?如果可能的话,我需要在任何循环之外使用它来保存临时值。

这让我想到了下一个问题,如何只使用.size而不是遍历数据结构来保存Thymeleaf中的本地自定义变量?我准备编写一个循环来获取这个.size如果需要但我想将它存储在一个局部变量中,我可以在以后的另一个循环中重用它!

示例:

<div th:each="test : ${testList}">
    <div th:each="testItem : ${test.subArrayList}">
        <div th:each="testItemSub : ${testItem}">
            <span> Get total size of "${testItemSub.name}" and store in a variable</span>
        </div>
    </div>
</div>

1 个答案:

答案 0 :(得分:2)

您可以通过每http://www.thymeleaf.org/doc/usingthymeleaf.html#local-variablesth:with属性设置本地变量。但是,我发现在设置后,我无法更新元素中的局部变量。换句话说,与JSP不同,无法在视图/模板中创建和操作变量。

解决特定用例的最简单方法是:

  1. 设置一个包含方法的模型对象,该方法将ArrayList作为参数并返回计数。显然,您可以在Java代码中实现所需的任何逻辑。
    • 类似地,可以使用Spring bean而不是模型对象。语法使用:${@myBean.doSomething()}
  2. 使用Thymeleaf附带的#ids表达式实用程序对象。如果您使用id '',它可以在模板中用作计数器。但是,只有在整个模板中只有一个这样的计数器时,这才有效。参考:http://www.thymeleaf.org/doc/usingthymeleaf.html#ids
  3. 基于原始问题的#ids示例用法:

    <div th:each="test : ${testList}">
        <div th:each="testItem : ${test.subArrayList}">                                 
                <div th:each="testItemSub : ${testItem}">
                        <span> Get total size of "${testItemSub.name}" and store in a variable</span>
                        <!--/*/ <th:block th:text="${#ids.seq('')}"></th:block> /*/-->
                </div>
        </div>
    </div>
    <p>There are a total of <span th:text="${#ids.prev('')}">123</span> elements.</p>