我现在对freemarker有点麻烦。我想在我的模板中基本做的事:遍历元素列表并为每个元素创建一个新文件。如何基于一个Freemarker模板创建多个文件
<#assign x=3>
<#list 1..x as i>
${i}
...create a new file with the output of this loop iteration...
</#list>
我在freemarker手册或谷歌上没有找到任何关于这方面的信息。有没有办法做到这一点?
我现在对freemarker有点麻烦。我想在我的模板中基本做的事:遍历元素列表并为每个元素创建一个新文件。如何基于一个Freemarker模板创建多个文件
<#assign x=3>
<#list 1..x as i>
${i}
...create a new file with the output of this loop iteration...
</#list>
我在freemarker手册或谷歌上没有找到任何关于这方面的信息。有没有办法做到这一点?
您可以使用自定义指令实现此功能。参见freemarker.template.TemplateDirectiveModel
,特别是TemplateDirectiveBody
。自定义指令可以指定在其嵌套内容中使用的Writer
。因此,您可以执行类似于<@output file="...">...</@output>
的操作,其中嵌套的内容将写入您在TemplateDirectiveModel
实现中提供的Writer
,在这种情况下,应该写入指定的文件。 (FMPP也这样做:http://fmpp.sourceforge.net/qtour.html#sect4)
你不能只使用FreeMarker。它的想法是从你的模板中产生单一输出流。它甚至不关心你是否将结果保存到文件,直接传递给TCP套接字,作为字符串存储在内存中还是做其他任何事情。
如果你真的想达到这个目的,你必须自己处理文件分离。例如,您可以将喜欢专线:
<#assign x=3>
<#list 1..x as i>
${i}
%%%%File=output${i}.html
...
</#list>
之后,你自己应该张贴处理FreeMarker的输出寻找线开始%%%%File=
在这一点上创建一个新文件。