Iterar coleções

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 chamar per.getName()
  • $per.age → tenta chamar per.getAge()

Sua entidade:

  • Campos privados: name, age
  • Propriedades públicas com letra inicial maiúscula: Name, Age, métodos correspondentes GetName(), 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ávelFunção
$foreach.indexÍndice atual, começa em 0
$foreach.countNúmero sequencial atual, começa em 1
$foreach.firstIndica se é o primeiro registro (valor booleano)
$foreach.lastIndica 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

  1. #foreach(variavel in coleção) + #end é o laço padrão do Velocity;
  2. Para iterar listas comuns, exiba diretamente $variavel;
  3. Ao iterar objetos de entidade: use $objeto.nomePropriedade respeitando a capitalização das propriedades públicas, não acesse campos privados;
  4. Nas entidades C#, recomenda‑se padronizar propriedades com letra inicial maiúscula e manter o mesmo padrão no template;
  5. Se os dados ficarem em branco, verifique primeiramente a capitalização das propriedades e a existência do acessor get.

Iterar coleções

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *