我使用Velocity 1.7格式化字符串,我在使用默认值时遇到了一些问题。当没有设置值并且我们想要使用另一个默认值时,Velocity本身没有特殊的语法。 通过Velocity的方式看起来像:
#if(!${name})Default John#else${name}#end
这对我的情况不一致。 谷歌搜索后,我找到了DisplayTool,根据文档,它看起来像:
$display.alt($name,"Default John")
所以我添加了maven依赖,但不确定如何将DisplayTool添加到我的方法中,很难找到相关的说明。 也许有人可以提供建议或提供有用的链接?..
我的方法:
public String testVelocity(String url) throws Exception{
Velocity.init();
VelocityContext context = getVelocityContext();//gets simple VelocityContext object
Writer out = new StringWriter();
Velocity.evaluate(context, out, "testing", url);
logger.info("got first results "+out);
return out.toString();
}
当我发送
String url = "http://www.test.com?withDefault=$display.alt(\"not null\",\"exampleDefaults\")&truncate=$display.truncate(\"This is a long string.\", 10)";
String result = testVelocity(url);
我得到“http://www.test.com?withDefault=$display.alt(\"not null \”,\“exampleDefaults \”)& truncate = $ display.truncate(\“这是一个long string。\“,10)”没有变化,但应该得到
"http://www.test.com?withDefault=not null&truncate=This is...
请告诉我我错过了什么。感谢。
答案 0 :(得分:1)
在调用Velocity之前,URL的构造发生在Java代码中,因此Velocity不会评估$display.alt(\"not null\",\"exampleDefaults\")
。该语法仅在Velocity模板(通常具有.vm
扩展名)中有效。
在Java代码中,不需要使用$
表示法,您可以直接调用DisplayTool方法。我以前没有和DisplayTool
合作,但它可能是这样的:
DisplayTool display = new DisplayTool();
String withDefault = display.alt("not null","exampleDefaults");
String truncate = display.truncate("This is a long string.", 10);
String url = "http://www.test.com?"
+ withDefault=" + withDefault
+ "&truncate=" + truncate;
但是,最好直接从Velocity模板调用DisplayTool
方法。这就是example usage中显示的内容。