コレクション走査

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.nameper.getName()を呼び出そうとします
  • $per.ageper.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のエンティティプロパティは小文字が一般的です。初心者がハマりやすい大文字小文字の落とし穴です。

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)

まとめ

  1. #foreach(変数 in コレクション) + #end がVelocity標準ループ構文;
  2. 通常のList走査時は$変数をそのまま出力;
  3. エンティティオブジェクト走査:$オブジェクト.プロパティ名 大文字小文字を一致させ、プライベートフィールドにアクセスしない;
  4. C#エンティティのプロパティは先頭大文字に統一し、テンプレート側も合わせる;
  5. データが空の場合、まずプロパティの大文字小文字、getアクセサの存在を確認してください。

コレクション走査

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です