Velocity #foreach — Iterar sobre colecciones y objetos
1. Iterar sobre una lista de cadenas
Código backend en C#
List<string> strList = new List<string>() {"dsd","sdfsd","asdfsd","asdfsdfsd"};
context.Put("strList", strList);Lenguaje del código: C# (cs)
Código de plantilla Velocity
#foreach($str in $strList)
$str <br/>
#endLenguaje del código: PHP (php)
Resultado de ejecución: recorre cada cadena de la lista y la imprime con salto de línea.

Explicación de sintaxis
#foreach(variableBucle in colección) inicia el bucle, #end lo cierra.
2. Iterar sobre lista de clases de entidad personalizadas
1. Entidad 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;
}
}Lenguaje del código: C# (cs)
2. Preparar la lista en el 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);Lenguaje del código: PHP (php)
3. Sintaxis para acceder a propiedades en plantilla
Código de plantilla:
#foreach($per in $pList)
<tr>
<td>$per.name</td>
<td>$per.age</td>
</tr>
#endLenguaje del código: HTML, XML (xml)
❌No se pueden leer los datos : aparecen errores o contenido vacío
Principio fundamental
Reglas de acceso a propiedades de objetos en Velocity:$per.xxx busca automáticamente el método Get público GetXxx()
$per.name→ intenta invocarper.getName()$per.age→ intenta invocarper.getAge()
Tu entidad:
- Campos privados:
name,age - Propiedades públicas con primera letra mayúscula:
Name,Age, métodos correspondientesGetName(),GetAge()
✅Sintaxis correcta de plantilla:
#foreach($per in $pList)
<tr>
<td>$per.Name</td>
<td>$per.Age</td>
</tr>
#endLenguaje del código: HTML, XML (xml)
Nota: En C# las propiedades empiezan con mayúscula; en Java suelen ser minúsculas. Es una trampa común de mayúsculas y minúsculas para quienes empiezan.
3. Variables integradas útiles de #foreach
Variables disponibles directamente dentro del bucle:
| Variable | Función |
|---|---|
$foreach.index | Índice actual, empieza en 0 |
$foreach.count | Número secuencial actual, empieza en 1 |
$foreach.first | Indica si es el primer registro (valor booleano) |
$foreach.last | Indica si es el último registro (valor booleano) |
Ejemplo:
#foreach($per in $pList)
$foreach.count , Nombre: $per.Name
#endLenguaje del código: PHP (php)
4. Mostrar en tabla
<table border="0" cellpadding="0" cellspacing="0">
#foreach($per in $pList)
<tr>
<td>$per.Name</td>
<td>$per.Age</td>
</tr>
#end
</table>Lenguaje del código: HTML, XML (xml)
Resumen
#foreach(variable in colección)+#endes el bucle estándar de Velocity;- Para listas normales, imprime directamente
$variable; - Al iterar objetos de entidad:
$objeto.nombrePropiedadrespeta la capitalización de las propiedades públicas, no accedas a campos privados; - En entidades C# se recomienda usar mayúscula inicial en propiedades y mantener la misma escritura en plantillas;
- Si los datos aparecen vacíos, revisa primero mayúsculas/minúsculas de propiedades y la existencia del accesor get.
Iterar colecciones
Previous: Comentarios