遍历集合

Velocity #foreach遍历集合 & 对象

一、遍历字符串List

C#后端代码
List<string> strList = new List<string>() {"dsd","sdfsd","asdfsd","asdfsdfsd"};
context.Put("strList", strList);Code language: C# (cs)
Velocity模板代码
#foreach($str in $strList)
    $str <br/>
#endCode language: PHP (php)

执行效果:循环取出列表每一个字符串,换行输出。

语法说明

#foreach(循环变量 in 集合) 开启循环,#end 闭合循环。

二、遍历自定义实体类 List

1. 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. 后端封装List
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.模板访问属性写法

模板代码:

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

会读取不到数据!报错/空白

根本原理

Velocity 访问对象属性规则:
$per.xxx 会自动寻找 公共Get方法 GetXxx()

  • $per.name → 尝试调用 per.getName()
  • $per.age → 尝试调用 per.getAge()

你的实体:

  • 私有字段:nameage
  • 公共属性大写开头:NameAge,对应方法 GetName()GetAge()

✅正确模板写法:

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

补充:C#规范属性首字母大写;Java实体属性一般小写,这是新手最容易踩的大小写陷阱。

三、#foreach内置常用变量

循环内部自带变量,可以直接使用:

变量作用
$foreach.index当前索引,从0开始
$foreach.count当前序号,从1开始
$foreach.first是否第一条数据(布尔值)
$foreach.last是否最后一条数据(布尔值)

示例:

#foreach($per in $pList)
    $foreach.count 、姓名:$per.Name
#endCode language: PHP (php)

四、表格显示

<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)

总结

  1. #foreach(变量 in 集合) + #end 是Velocity标准循环;
  2. 遍历普通List,直接输出$变量
  3. 遍历实体对象:$对象.属性名 匹配公共属性名大小写,不要访问私有字段;
  4. C#实体属性建议统一大写首字母,模板保持一致书写;
  5. 如果出现数据空白,优先检查属性大小写、是否存在get访问器

Previous:

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注