Счетчики в петлях в Тимелеафе

Есть ли способ сделать цикл в 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>

Ответы

Ответ 1

Если вы все еще ищете правильный синтаксис 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 и getYear()

Ответ 2

Вы можете использовать специальную переменную итерации thymleaf внутри каждого блока. Это специальное имя переменной - это имя вашей переменной элемента, связанное с ключевым словом 'Stat' (ex: 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