17

有没有办法在没有列表的情况下在 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>
4

2 回答 2

25

如果您仍在寻找正确的 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-Timejava.util.Date不会给我想要的结果

阅读有关java.util.Date 和 getYear()的讨论

于 2013-05-18T22:54:56.133 回答
22

您可以在每个块内使用特殊的 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

于 2013-05-21T12:35:42.900 回答