Счетчики в петлях в Тимелеафе
Есть ли способ сделать цикл в 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