访问对象内部的字段时,Velocity 模板不会去模板化

Velocity Template is not detempletizing when a field inside object is accessed

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

它替换了 $string 的值,但是 $value.name 永远不会被替换。
我试图 detempletize $value 的值并且使用 TestClass$Sample@5594a1b5 作为输出工作正常,所以问题是 Template 无法访问对象中的字段.

由于某些限制,我必须使用 VelocityEngine.evaluate itself and not 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

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

public class Sample {
    ...