访问对象内部的字段时,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 {
...
我写了下面的代码,它基本上需要通过在模板 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 {
...