当访问对象内的字段时,Velocity Template不会被破坏

时间:2017-01-04 14:12:54

标签: java velocity vtl

我编写了以下代码,基本上需要通过替换模板Hello simple Kishore$string$value.name的值来打印Hello $string $value.name

它取代了$string的值,但$value.name永远不会被取代 我试图将$value的值贬低,并且可以使用TestClass$Sample@5594a1b5作为输出正常工作,因此问题在于模板无法访问对象中的字段。 / p>

由于某些限制,我必须使用VelocityEngine.evaluate本身,而不是VelocityEngine.mergeTemplate

代码:

class Sample {
    private String name = "Kishore";

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

public class Test {
    public static void main(String args[]) throws Exception {
        String query = "Hello $string $value.name";

        VelocityContext vCtx = new VelocityContext();
        vCtx.put("string","simple");
        vCtx.put("value", new Sample());

        Writer out = new StringWriter();
        VelocityEngine engine = new VelocityEngine();
        engine.init();
        engine.evaluate(vCtx, out, "ERR:", new StringReader(query));

        System.out.println(out.toString());
    }
}

输出:

Hello simple $value.name

1 个答案:

答案 0 :(得分:2)

要解决此问题,您应为public类添加Sample修饰符:

public class Sample {
    ...