扩展方法

一、后端 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)

cs后端代码中设置对象变量

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)
  • 调用带两个字符串参数的方法
  • VTL 会先解析 $a$b,传入实参 "hello""foxdevelop"
  • 返回拼接结果:hellofoxdevelop

总结

  1. 方法名大小写严格匹配
    C# getMyName()GetMyName(),模板必须和代码写法一致。
  2. 传参直接写变量
    不需要额外引号,$pTest.JoinStr($a,$b) 正确;不要写成 $pTest.JoinStr("$a","$b")(会传递字面字符串”$a”)
  3. 属性 vs 方法区分
  • $pTest.Name → 访问属性(getter)
  • $pTest.getMyName() → 调用方法
  1. 返回值自动输出
    模板里直接写 $对象.方法(),Velocity会自动打印方法返回值;如果不需要输出,用 #set 接收结果:
#set($result = $pTest.JoinStr($a,$b))Code language: PHP (php)

三、最终页面渲染输出

方法的调用
Tom;

hellofoxdevelop;

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注