web-dev-qa-db-ja.com

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
Mouscellaneous

まだ正しい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() に関するこのディスカッションを読んでください

23
cognant

各ブロック内で特別な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

20
fliim