2013-04-09 64 views
14

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

回答

17

如果你还在寻找正确的规划环境地政司语法, 这里是为我工作:

<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设置的选项文本。
  • 使用乔达时间,而不是作为java.util.Date不会给我想要的结果

阅读java.util.Date and getYear()

17

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

+1

这比接受的答案干净多了。 +1 – 2016-04-27 11:54:13

+1

@PriiduNeemre“_这比接受的答案要干净得多。”但这个问题清楚地表明,要保持没有列表的迭代计数器。在上面的代码中'$ {prods}'是一个列表。 – Lucky 2016-06-09 15:16:00