Itérer sur des collections

Velocity #foreach — Itérer sur des collections & objets

1. Itérer sur une liste de chaînes de caractères

Code backend C#
List<string> strList = new List<string>() {"dsd","sdfsd","asdfsd","asdfsdfsd"};
context.Put("strList", strList);Langage du code : C# (cs)
Code template Velocity
#foreach($str in $strList)
    $str <br/>
#endLangage du code : PHP (php)

Résultat : parcourt chaque chaîne de la liste et affiche le contenu avec un saut de ligne.

Explication de la syntaxe

#foreach(variableDeBoucle in collection) démarre la boucle, #end la clôture.

2. Itérer sur une liste de classes d’entité personnalisées

1. Entité Person (C#)
public class Person
{
    private string name;
    public string Name
    {
        get { return name; }
        set { name = value; }
    }
    private int age;
    public int Age
    {
        get { return age; }
        set { age = value; }
    }
    public Person(){}
    public Person(string name,int age)
    {
        this.name = name;
        this.age = age;
    }
}Langage du code : C# (cs)
2. Construire la liste côté backend
List<Person> pList = new List<Person>();
pList.Add(new Person("Jack", 1));
pList.Add(new Person("Ben", 11));
pList.Add(new Person("Kevin", 100));
pList.Add(new Person("Simon", 500));
pList.Add(new Person("Lulu", 20));
context.Put("pList", pList);Langage du code : PHP (php)
3. Syntaxe d’accès aux propriétés dans le template

Code du template :

#foreach($per in $pList)
<tr>
    <td>$per.name</td>
    <td>$per.age</td>
</tr>
#endLangage du code : HTML, XML (xml)

Les données ne sont pas récupérées ! Erreur ou affichage vide

Principe sous‑jacent

Règle d’accès aux propriétés d’objet de Velocity :
$per.xxx cherche automatiquement la méthode Get publique GetXxx()

  • $per.name → tente d’appeler per.getName()
  • $per.age → tente d’appeler per.getAge()

Votre entité :

  • Champs privés : name, age
  • Propriétés publiques avec initiale majuscule : Name, Age, méthodes correspondantes GetName(), GetAge()

✅Bonne syntaxe pour le template :

#foreach($per in $pList)
<tr>
    <td>$per.Name</td>
    <td>$per.Age</td>
</tr>
#endLangage du code : HTML, XML (xml)

Note : la convention C# impose une majuscule sur la première lettre des propriétés ; les propriétés d’entités Java sont généralement en minuscules. C’est un piège à la casse fréquent pour les débutants.

3. Variables natives utiles de #foreach

Ces variables sont intégrées à la boucle et prêtes à l’emploi :

VariableRôle
$foreach.indexIndex courant, commence à 0
$foreach.countNuméro d’ordre courant, commence à 1
$foreach.firstIndique s’il s’agit du premier enregistrement (booléen)
$foreach.lastIndique s’il s’agit du dernier enregistrement (booléen)

Exemple :

#foreach($per in $pList)
    $foreach.count , Nom : $per.Name
#endLangage du code : PHP (php)

4. Affichage dans un tableau HTML

<table border="0" cellpadding="0" cellspacing="0">
#foreach($per in $pList)
    <tr>
        <td>$per.Name</td>
        <td>$per.Age</td>
    </tr>
#end
</table>Langage du code : HTML, XML (xml)

Résumé

  1. #foreach(variable in collection) + #end constitue la boucle standard de Velocity ;
  2. Pour parcourir une liste simple, affichez directement $variable ;
  3. Pour parcourir des objets d’entité : utilisez $objet.nomPropriete en respectant la casse des propriétés publiques, n’accédez jamais aux champs privés ;
  4. Dans les entités C#, préférez systématiquement une majuscule initiale pour les propriétés et respectez‑la dans le template ;
  5. Si les données ne s’affichent pas, vérifiez en priorité la casse des propriétés et l’existence de l’accesseur get.

Itérer sur des collections

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *