Freemarker模板的内省或操纵

时间:2014-05-21 17:54:22

标签: java freemarker

我正在使用" dynamic" Freemarker模板,意思是可以根据用户提交的输入进行更改的模板。我希望能做两件事:

  1. 检查模板的已解析语法树以查看它包含的内容,尤其是标识符和$ {variables}。
  2. 操纵已解析的树,添加/删除元素。
  3. 现在,我正在通过一些丑陋的正则表达式和字符串操作来实现这一点。它很丑陋且容易出错,因此我喜欢利用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模板进行内省,以允许我上面讨论过的那种编程分析和操作。欢迎提供反馈意见:

    freemarker-introspection

1 个答案:

答案 0 :(得分:0)

FreeMarker目前没有用于检查模板的已发布API,更不用说修改它们了。它会很有用,但它没有它。所以,我想知道你是否可以从不同的角度解决问题。您说您正在动态生成模板,除非模板本身是用户提交的,否则您可以根据生成模板的方式存储用户提交的信息,而不是模板本身......或者类似的东西。