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’appelerper.getName()$per.age→ tente d’appelerper.getAge()
Votre entité :
- Champs privés :
name,age - Propriétés publiques avec initiale majuscule :
Name,Age, méthodes correspondantesGetName(),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 :
| Variable | Rôle |
|---|---|
$foreach.index | Index courant, commence à 0 |
$foreach.count | Numéro d’ordre courant, commence à 1 |
$foreach.first | Indique s’il s’agit du premier enregistrement (booléen) |
$foreach.last | Indique 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é
#foreach(variable in collection)+#endconstitue la boucle standard de Velocity ;- Pour parcourir une liste simple, affichez directement
$variable; - Pour parcourir des objets d’entité : utilisez
$objet.nomProprieteen respectant la casse des propriétés publiques, n’accédez jamais aux champs privés ; - Dans les entités C#, préférez systématiquement une majuscule initiale pour les propriétés et respectez‑la dans le template ;
- 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