解析java中的速度变量

时间:2013-07-10 01:59:21

标签: java velocity

以下是我想要做的一个例子。 我有一堆文件,如test1.vm:

Welcome ${name}. This is test1.

然后我有一个名为defaults.vm的文件:

#set($name = "nmore")

我想在不使用#parse的情况下使用defaults.vm渲染test1.vm(以及其他测试文件)和变量,因为我必须修改所有测试文件。

有没有办法在随附的java文件中执行此操作?

1 个答案:

答案 0 :(得分:4)

我不确定您是否有任何约束或任何其他特定要求,但如果您没有尝试使用Velocity API?像这样:

Context context = new VelocityContext();

Template template = Velocity.getTemplate("src/main/resources/defaults.vm");
template.merge(context, NullWriter.NULL_WRITER);

StringWriter writer = new StringWriter();
Template toBeParsedTemplate = Velocity.getTemplate("src/main/resources/test1.vm");
toBeParsedTemplate.merge(context, writer);

String renderedContent = writer.getBuffer().toString();
System.out.println(renderedContent);

我们的想法是,您使用Context生成的变量填充defaults.vm对象,并使用相同的上下文来评估test1.vm

我已经尝试过使用Velocity 1.7和commons-io 2.4(对于NullWriter)似乎工作正常,但我不确定这是否符合您的要求或者您正在研究其他替代方案(不使用Velocity API)。

此处Context对象的更多信息:
http://velocity.apache.org/engine/devel/developer-guide.html#The_Context

希望有所帮助。