Velocity #foreach — Iterar coleções & objetos
1. Iterar uma lista de strings
Código backend C#
List<string> strList = new List<string>() {"dsd","sdfsd","asdfsd","asdfsdfsd"};
context.Put("strList", strList);Code language: C# (cs)
Código do template Velocity
#foreach($str in $strList)
$str <br/>
#endCode language: PHP (php)
Resultado da execução: percorre cada texto da lista e exibe com quebra de linha.

Explicação da sintaxe
#foreach(variavelLoop in coleção) inicia o laço, #end fecha o laço.
2. Iterar lista de classes de entidade personalizadas
1. Entidade 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;
}
}Code language: C# (cs)
2. Montar a lista no 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);Code language: PHP (php)
3. Forma de acessar propriedades no template
Código do template:
#foreach($per in $pList)
<tr>
<td>$per.name</td>
<td>$per.age</td>
</tr>
#endCode language: HTML, XML (xml)
❌Não consegue ler os dados! Erros ou conteúdo em branco
Princípio fundamental
Regra de acesso a propriedades de objeto no Velocity:$per.xxx procura automaticamente o método Get público GetXxx()
$per.name→ tenta chamarper.getName()$per.age→ tenta chamarper.getAge()
Sua entidade:
- Campos privados:
name,age - Propriedades públicas com letra inicial maiúscula:
Name,Age, métodos correspondentesGetName(),GetAge()
✅Forma correta no template:
#foreach($per in $pList)
<tr>
<td>$per.Name</td>
<td>$per.Age</td>
</tr>
#endCode language: HTML, XML (xml)
Observação: No C# as propriedades começam com letra maiúscula; no Java costumam ser minúsculas. Essa é uma armadilha de caixa‑alta/baixa muito comum para iniciantes.
3. Variáveis embutidas úteis do #foreach
Variáveis nativas disponíveis dentro do laço:
| Variável | Função |
|---|---|
$foreach.index | Índice atual, começa em 0 |
$foreach.count | Número sequencial atual, começa em 1 |
$foreach.first | Indica se é o primeiro registro (valor booleano) |
$foreach.last | Indica se é o último registro (valor booleano) |
Exemplo:
#foreach($per in $pList)
$foreach.count , Nome: $per.Name
#endCode language: PHP (php)
4. Exibição em tabela
<table border="0" cellpadding="0" cellspacing="0">
#foreach($per in $pList)
<tr>
<td>$per.Name</td>
<td>$per.Age</td>
</tr>
#end
</table>Code language: HTML, XML (xml)
Resumo
#foreach(variavel in coleção)+#endé o laço padrão do Velocity;- Para iterar listas comuns, exiba diretamente
$variavel; - Ao iterar objetos de entidade: use
$objeto.nomePropriedaderespeitando a capitalização das propriedades públicas, não acesse campos privados; - Nas entidades C#, recomenda‑se padronizar propriedades com letra inicial maiúscula e manter o mesmo padrão no template;
- Se os dados ficarem em branco, verifique primeiramente a capitalização das propriedades e a existência do acessor get.
Iterar coleções
Previous: Comentários