以下是我想要做的一个例子。 我有一堆文件,如test1.vm:
Welcome ${name}. This is test1.
然后我有一个名为defaults.vm的文件:
#set($name = "nmore")
我想在不使用#parse的情况下使用defaults.vm渲染test1.vm(以及其他测试文件)和变量,因为我必须修改所有测试文件。
有没有办法在随附的java文件中执行此操作?
答案 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
希望有所帮助。