DisplayTool的安装和使用

时间:2012-11-19 09:14:49

标签: maven velocity

我使用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...

请告诉我我错过了什么。感谢。

1 个答案:

答案 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中显示的内容。