Velocity #foreach コレクションとオブジェクトの走査
1. 文字列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 でループを閉じます。
2. 独自エンティティクラスの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のエンティティプロパティは小文字が一般的です。初心者がハマりやすい大文字小文字の落とし穴です。
3. #foreach組み込み変数
ループ内で直接利用可能な変数です:
| 変数 | 役割 |
|---|---|
$foreach.index | 現在のインデックス、0から開始 |
$foreach.count | 現在の連番、1から開始 |
$foreach.first | 最初のレコードかどうか(真偽値) |
$foreach.last | 最後のレコードかどうか(真偽値) |
サンプル:
#foreach($per in $pList)
$foreach.count 、氏名:$per.Name
#endCode language: PHP (php)
4. テーブル表示
<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アクセサの存在を確認してください。
コレクション走査
Previous: コメント
Next: 変数境界に関する補足