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()
你的實體:
- 私有欄位:
name、age - 公開屬性開頭大寫:
Name、Age,對應方法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)
總結
#foreach(變數 in 集合)+#end是Velocity標準迴圈;- 遍歷普通List,直接輸出
$變數; - 遍歷實體物件:
$物件.屬性名要匹配屬性大小寫,不要存取私有欄位; - C#實體屬性建議統一開頭大寫,範本寫法保持一致;
- 如果出現資料空白,優先檢查屬性大小寫、get存取器是否存在。
遍歷集合