1

我想在独立应用程序中使用 VelocityTool 的 GenericTools 进行一些标准格式。例如,在我的 Velocity 模板中有这样的东西来使用 GenericTools 的 NumberTool 格式化程序:

Total: $numberTool.format("#0.00", $totalPnL)

如何将上述“$numberTool”与 GenericTool NumberTool 关联起来。这是我的速度代码:

Velocity.init();
VelocityContext velocityContext = new VelocityContext();
Template template = Velocity.getTemplate("example.vm");
velocityContext.put("totalPnL", 100);
StringWriter sw = new StringWriter();
template.merge(velocityContext, sw);

现在我知道我可以这样做来让它工作:

velocityContext.put("numberTool", new NumberTool());

但这就是我需要将所有 GenericTools 添加到我的应用程序的方式吗?手动和一次一个(例如 DateTool 的另一行......等)?没有办法让所有 GenericTools 暴露给我的模板吗?我知道 VelocityTools 附带了一个“tools.xml”,它定义了 GenericTools。我可以将其添加到我的应用程序以公开所有工具吗?如果是这样,怎么做?

谢谢,大卫

4

2 回答 2

4

http://velocity.apache.org/tools/devel/javadoc/org/apache/velocity/tools/ToolManager.html

http://velocity.apache.org/tools/devel/standalone.html

默认工具配置已经提供了所有通用工具。如果你想配置这些工具,你可以创建一个配置。甚至可以自动加载配置或手动规范。

   ToolManager tm = new ToolManager();
   tm.setVelocityEngine(yourVelocityEngine);
   Context context = tm.createContext();
于 2012-08-24T19:08:40.370 回答
2

至少我也是这样做的。我举个例子

context.put("esc", new EscapeTool());

然后在模板中我简单地使用

${esc.h}

在代码中写一个“#”,以便 Velocity 不会将其解析为“velocity-script”。

我认为那些辅助工具相当实用,只涵盖一些基本标志。它们不打算成为标准,您可以按需包含它们。

例如,我构建了一个抽象类,它加载速度的上下文并将 EscapeTool 始终放入上下文中,这样我就不必在任何地方添加它。

祝你的项目好运

塞巴斯蒂安

于 2012-08-23T14:58:08.970 回答