0

我正在使用 Velocity 1.7 来格式化字符串,但我在使用默认值时遇到了一些问题。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(\"This is a long string.\" , 10)" 没有变化,但应该得到

"http://www.test.com?withDefault=not null&truncate=This is...

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

4

1 回答 1

1

URL 的构造发生在您的 Java 代码中,在您调用 Velocity 之前,因此 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;

不过,DisplayTool直接从 Velocity 模板调用您的方法可能会更好。这就是示例用法中显示的内容。

于 2012-11-19T15:26:41.070 回答