一、バックエンド 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;
}
//引数なしインスタンスメソッド
public string getMyName()
{
return this.name;
}
//複数引数を持つインスタンスメソッド
public string JoinStr(string str1, string str2)
{
return str1 + str2;
}
}Code language: C# (cs)
C#バックエンドコードでオブジェクト変数を設定
Person pTest = new Person("Tom", 22);
context.Put("pTest", pTest);Code language: JavaScript (javascript)
二、VTLテンプレートコード & レンダリング解説
メソッド呼び出し<br />
$pTest.getMyName();
#set($a = "hello")
#set($b = "foxdevelop")
$pTest.JoinStr($a, $b);Code language: PHP (php)
1. $pTest.getMyName()
- オブジェクトの引数なしメソッド
getMyName()を呼び出す - 戻り値:
Tom
✅ Velocity 引数なしメソッド呼び出し:丸括弧
()は省略可、$pTest.getMyNameは$pTest.getMyName()と同等
2. $pTest.JoinStr($a, $b)
- 文字列引数を2つ受け取るメソッドを実行
- VTLが先に
$a、$bを解釈し、実引数"hello"、"foxdevelop"を渡す - 連結結果を返却:
hellofoxdevelop
まとめ
- メソッド名は大文字小文字を区別
C#getMyName()≠GetMyName()、テンプレートはコードの記述と完全に一致させる必要があります。 - 引数には変数をそのまま記述
クォートは不要、$pTest.JoinStr($a,$b)が正しい。$pTest.JoinStr("$a","$b")と書かないでください(文字列”$a”が渡されてしまいます) - プロパティとメソッドの違い
$pTest.Name→ プロパティアクセス(getter)$pTest.getMyName()→ メソッド呼び出し
- 戻り値は自動出力される
テンプレート上で$オブジェクト.メソッド()と記述するとVelocityが戻り値を自動出力。出力不要な場合は#setで結果を受け取ります:
#set($result = $pTest.JoinStr($a,$b))Code language: PHP (php)
三、最終ページ出力結果
メソッド呼び出し
Tom;
hellofoxdevelop;
拡張メソッド
Previous: 変数境界に関する補足
Next: エスケープとif条件