gpt4 book ai didi

速度模板不能替代方法

转载 作者:行者123 更新时间:2023-12-02 21:43:12 26 4
gpt4 key购买 nike

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 只允许调用公共(public)类公共(public)方法。匿名类不是公共(public)的,因此调用会被阻止。

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

如果您禁用安全 uberspector,它也会起作用,但这不是一个好主意,因为它会打开系统。

关于速度模板不能替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18233883/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com