3

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

它替代了 的值,$string$value.name永远不会被替换。
我试图去模板化 和 的值,$value它可以TestClass$Sample@5594a1b5作为输出正常工作,所以问题在于Template 无法访问 object 中的字段

由于一些限制,我必须使用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
4

1 回答 1

3

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

public class Sample {
    ...
于 2017-01-04T14:40:08.570 回答