我正在使用" dynamic" Freemarker模板,意思是可以根据用户提交的输入进行更改的模板。我希望能做两件事:
现在,我正在通过一些丑陋的正则表达式和字符串操作来实现这一点。它很丑陋且容易出错,因此我喜欢利用Freemarker在Java中的模板表示。
根据JavaDoc,Template.getRootTreeNode似乎是我想要的开始:我可以检索模板的一个类似DOM的解析树,一个TemplateElement的实例。但是,TemplateElement的许多具体实现都不公开。 JavaDoc甚至不记录TemplateElement。看来我从TemplateElement获取有用信息的唯一方法就是编写Freemarker包中的代码。是否有一种Freemarker-blessed方式来检查模板?
理想情况下,我们有适当的TemplateElement层次结构文档,并使其子类公开。虽然这不允许我直接修改模板,但至少可以让我检查模板的元素。
几年前也提出了以下问题,结果有限:
How can I introspect a freemarker template to find out what variables it uses?
更新:
我已经启动了一个Github开源项目,以便对已解析的Freemarker模板进行内省,以允许我上面讨论过的那种编程分析和操作。欢迎提供反馈意见:
答案 0 :(得分:0)
FreeMarker目前没有用于检查模板的已发布API,更不用说修改它们了。它会很有用,但它没有它。所以,我想知道你是否可以从不同的角度解决问题。您说您正在动态生成模板,除非模板本身是用户提交的,否则您可以根据生成模板的方式存储用户提交的信息,而不是模板本身......或者类似的东西。