【问题标题】:Velocity templates not substituting methods速度模板不替代方法
【发布时间】:2013-08-14 14:01:35
【问题描述】:

Velocity User's Guide 中,在模板中使用方法似乎很简单。 我试过了,但无法让它工作。谁能告诉我我做错了什么?

谢谢。

这是我的代码

@Test
public void testVelocity() {
  Velocity.init();
  VelocityContext map = new VelocityContext();
  map.put("test", "Success");
  map.put("ok", "OK!");
  map.put("func", new Object() {public String test() {return "Yay!";}});
  map.put("func2", new Object() {public String test(String t) {return t+t;}});

  String template = "${func.test()} $test $func2.test($ok)";
  StringWriter writer = new StringWriter();
  Velocity.evaluate(map, writer, "", new StringReader(template));
  assertEquals("Yay! Success OK!OK!", writer.toString());
}

这是输出:

org.junit.ComparisonFailure: 
Expected :Yay! Success OK!OK!
Actual   :${func.test()} Success $func2.test($ok)

变量替换似乎可以正常工作,但方法调用不行。

请帮忙。

【问题讨论】:

    标签: velocity


    【解决方案1】:

    问题在于,出于安全原因,Velocity 只允许调用 public classespublic methods。匿名类不公开,因此调用被阻塞。

    如果你放置一个真实的对象,一个公共类的实例,它会起作用。

    如果您禁用安全超级检查器,它也可以工作,但这不是一个好主意,因为它会打开系统。

    【讨论】:

    • 谢谢!这有帮助!我正在做 POC,所以我没有费心创建“真正的”课程......
    猜你喜欢
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-10
    相关资源
    最近更新 更多