2013-04-09 315 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