遍歷集合

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存取器是否存在

遍歷集合

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *