Velocity不会用VelocityContext替换Template的变量

时间:2015-12-30 14:47:28

标签: java velocity

我是Velocity的新手,发现奇怪的是模板的变量没有被我放入VelocityContext的值所取代。

代码是这样的。

import java.io.StringWriter;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;

public class Main {
public static void main(String args[]){
    People XiaoMing=new People("XiaoMing", 11);
    VelocityEngine engine=new VelocityEngine();
    Template template=engine.getTemplate("/src/main/java/VMTemplate.vm");
    VelocityContext context=new VelocityContext();
    context.put("People", XiaoMing);
    StringWriter sw=new StringWriter(10000);
    template.merge(context, sw);
    System.out.println(sw.toString());
    }
}

class People{
  private String name;
  private int age;
  public People(String name,int age){
      this.name=name;
      this.age=age;
  }

  public String getName(){
      return name;
  }

  public int getAge(){
      return age;
   }
}

模板如下所示。

#set($Name=$People.getName())
#set($Age=$People.getAge())

He is a $Age years old guy,and his name is $Name.

我不知道出了什么问题。你能找到我吗?

非常感谢!

3 个答案:

答案 0 :(得分:2)

最后,我找到了为什么不在模板中替换对象的原因。

公开时,可以通过Velocity 解析对象。 因此,我只需要创建一个名为小明的公共类。

答案 1 :(得分:1)

我相信你有一些模板后的语法是

VelocityContext context = new VelocityContext();
context.put("Name", XiaoMing.getName());

小明是一个人物对象,而不是一个字符串。

答案 2 :(得分:0)

我遇到了类似的问题。 如果使用自定义字段,则不需要上下文提供程序。 而是重写AbstractCustomFieldType的getVelocityParameters(),它返回一个映射。

还有一个陷阱,就是空白不能在#之前的#foreach之前,等等。