web-dev-qa-db-fra.com

Compteurs en Boucles à Thymeleaf

Existe-t-il un moyen de faire une boucle dans Thymeleaf sans liste?

Je voudrais essentiellement convertir cet extrait en 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>

-- Mettre à jour --

J'ai décidé que c'est dans la ligne de la façon dont je veux le faire, mais je ne suis pas sûr de la syntaxe springEL:

<option th:each="i : ${#numbers.sequence( 1, 100)}" th:value="#{ T(Java.util.Date).getYear() - $i }">1</option>
17
Mouscellaneous

Dans le cas où vous recherchez toujours la syntaxe SpEL correcte, voici ce qui a fonctionné pour moi:

<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>

Remarque:

  • ajoutée th:text pour définir le texte de l'option.
  • utilisé Joda-Time à la place comme Java.util.Date ne me donnerait pas le résultat souhaité

Lisez cette discussion sur Java.util.Date et getYear ()

23
cognant

Vous pouvez utiliser la variable d'itération thymleaf spéciale à l'intérieur de chaque bloc. Ce nom de variable spéciale est le nom de votre variable d'élément concaténé avec le mot clé 'Stat' (ex: elt -> eltStat) Cette variable vous donne de nombreuses informations liées à l'itération.

Vous pouvez également spécifier ce nom de variable après votre variable d'élément. Par exemple:

<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>

Plus d'informations dans la documentation officielle ci-dessous:
http://www.thymeleaf.org/doc/tutorials/2.1/usingthymeleaf.html#keeping-iteration-status

20
fliim