Itération dans Thymeleaf

1. Vue d’ensemble

Thymeleaf est un moteur de gabarit Java polyvalent pour le traitement de documents XML, XHTML et HTML5 .

Dans ce rapide didacticiel, nous verrons comment utiliser l’itération avec Thymeleaf, ainsi que d’autres fonctionnalités fournies par la bibliothèque.

Pour plus d’informations sur Thymeleaf, consultez notre lien d’article d’introduction:/thymeleaf-in-spring-mvc[ici].

2. Dépendances Maven

Pour créer cet exemple, nous allons utiliser les bibliothèques Spring Framework avec les bibliothèques Thymeleaf.

Ici nous pouvons voir nos dépendances ( https://search.maven.org/classic/#search%7Cga%7C1%7Cg%3A%22org.thymeleaf%22%20AND%20a%3A%22thymeleaf%22&thymeleaf ]et https ://search.maven.org/classic/#search%7Cga%7C1%7Cg%3A%22org.thymeleaf%22%20and%20a%3a%22thymeleaf-spring4%22[thymeleaf-spring]):

<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf</artifactId>
    <version>3.0.9.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf-spring5</artifactId>
    <version>3.0.9.RELEASE</version>
</dependency>

3. Exemple de montage

Avant de passer à la couche de vue, créons la structure MVC pour notre exemple.

En commençant par le code d’extrait de la couche modèle:

public class Student implements Serializable {
    private Integer id;
    private String name;
   //standard contructors, getters, and setters
}

Fournissons également la méthode du contrôleur chargée de charger le modèle et de le renvoyer à la couche de vue:

@GetMapping("/listStudents")
public String listStudent(Model model) {
    model.addAttribute("students", StudentUtils.buildStudents());
    return "listStudents.html";
}

Dans notre exemple ci-dessus, _buildStudents () method renvoie simplement une liste d’objets Student que nous ajoutons ensuite à model_ .

4. Le th: each attribut

Dans Thymeleaf, l’itération est réalisée en utilisant le __th: chaque __attribute.

Un des aspects intéressants de cet attribut est que il acceptera et itérera sur différents types de données _, _ tels que:

  • objets implémentant java.util.Iterable

  • objets implémentant java.util.Map

  • tableaux

  • tout autre objet est traité comme s’il s’agissait d’une liste à valeur unique

contenant un élément

Appelons maintenant le _th: chaque attribut _ avec les données que nous avons définies dans notre exemple ci-dessus:

<tr th:each="student: ${students}">
    <td th:text="${student.id}"/>
    <td th:text="${student.name}"/>
</tr>

L’extrait de code indique le th: each itérant sur notre liste d’étudiants. L’attribut model est accessible à l’aide de la _ $ \ {} notation , et chaque élément de la liste est transmis au corps de la boucle via la variable student _.

5. Statut Variable

Thymeleaf permet également un mécanisme utile pour suivre le processus d’itération via la variable d’état .

La variable status fournit les propriétés suivantes:

  • index : l’index d’itération en cours, commençant par 0 (zéro)

  • count : le nombre d’éléments traités jusqu’à présent

  • taille : le nombre total d’éléments dans la liste

  • pair/impair : vérifie si l’index d’itération actuel est pair ou impair

  • first : vérifie si l’itération en cours est la première

  • last : vérifie si l’itération en cours est la dernière

Voyons comment fonctionne la variable status dans notre exemple:

<tr
  th:each="student, iStat : ${students}"
  th:style="${iStat.odd}? 'font-weight: bold;'"
  th:alt-title="${iStat.even}? 'even' : 'odd'">
    <td th:text="${student.id}"/>
    <td th:text="${student.name}"/>
</tr>

Ici, nous avons inclus la propriété iStat.odd pour évaluer la condition et définir un style en gras pour la ligne en cours. La même chose est faite lors de la prochaine évaluation, mais cette fois, nous utilisons _iStat.even _ pour imprimer une valeur via l’attribut HTML alt/title.

Dans le cas où nous omettions la création explicite de variable d’état (présentée sous la forme iStat dans notre exemple) , nous pourrions appeler notre variable d’état simplement en utilisant _ studentStat , qui est l’agrégation de la variable student avec le suffixe Stat._

6. Conclusion

Dans cet article, nous avons exploré l’une des nombreuses fonctionnalités fournies par la bibliothèque Thymeleaf.

Nous avons présenté l’itération dans Thymeleaf en utilisant l’attribut th: each , avec ses propriétés prêtes à l’emploi.

Une version opérationnelle du code présenté dans cet article est disponible dans notre référentiel GitHub