Thymeleaf的循环中的计数器

时间:2013-04-09 14:31:55

标签: thymeleaf

有没有办法在没有列表的情况下在Thymeleaf中进行循环?

我想基本上将这个片段转换为Thymeleaf:

<jsp:useBean id="now" class="java.util.Date" />
<fmt:formatDate var="year" value="${now}" pattern="yyyy" />
<c:forEach var="i" begin="0" end="99">
    <form:option value="${year-i}" />
</c:forEach>
</form:select>

- 更新 -

我已经决定这是我想要的方式,但我不确定springEL语法:

<option th:each="i : ${#numbers.sequence( 1, 100)}" th:value="#{ T(java.util.Date).getYear() - $i }">1</option>

2 个答案:

答案 0 :(得分:22)

如果您仍在寻找正确的SpEL语法, 这对我有用:

<option th:each="i : ${#numbers.sequence( 1, 100)}"
        th:value="${ (new org.joda.time.DateTime()).getYear() - i }"
        th:text="${ (new org.joda.time.DateTime()).getYear() - i }">1</option>

注意:

  • 添加th:text以设置选项文字。
  • 使用Joda-Time代替java.util.Date不会给我预期的结果

java.util.Date and getYear()

上阅读此讨论

答案 1 :(得分:19)

您可以在每个块中使用特殊的thymleaf迭代变量。 此特殊变量名称是元素变量的名称与关键字'Stat'连接(例如:elt -> eltStat) 此变量为您提供了许多与迭代相关的信息。

您还可以在元素变量后指定此变量名称。例如:

<tr th:each="prod,iterStat : ${prods}" th:class="${iterStat.odd}? 'odd'">
    <td th:text="${prod.name}">Onions</td>
    <td th:text="${prod.price}">2.41</td>
    <td th:text="${prod.inStock}? #{true} : #{false}">yes</td>
</tr>

以下官方文档中的更多信息:
http://www.thymeleaf.org/doc/tutorials/2.1/usingthymeleaf.html#keeping-iteration-status