java - Freemarker 模板的自省(introspection)或操作

标签 java freemarker

我正在使用“动态”Freemarker 模板,这意味着可以根据用户提交的输入进行更改的模板。我希望能够做两件事:

  1. 检查模板的解析语法树以查看其包含的内容,尤其是标识符和 ${variables}。
  2. 操作已解析的树,添加/删除元素。

现在,我正在通过一些丑陋的正则表达式和字符串操作来完成此任务。它丑陋且容易出错,所以我很想利用 Java 中的 Freemarker 模板表示。

根据 JavaDoc,Template.getRootTreeNode 似乎是我想要的开始:我可以检索模板的类似 DOM 的解析树,TemplateElement 的实例。但 TemplateElement 的许多具体实现并不是公开的。 JavaDoc 甚至没有记录 TemplateElement。看来我从 TemplateElement 获取有用信息的唯一方法是编写 Freemarker 包中的代码。是否有 Freemarker 祝福的方法来检查模板?

理想情况下,我们应该有 TemplateElement 层次结构的适当文档,并将其子类公开。虽然这不允许我直接修改模板,但至少可以让我检查模板的元素。

几年前也有人提出过以下问题,但结果有限:

How can I introspect a freemarker template to find out what variables it uses?

更新:

我已经启动了一个 Github 开源项目,以实现对解析的 Freemarker 模板的内省(introspection),以允许我上面讨论的那种编程分析和操作。欢迎反馈:

freemarker-introspection

最佳答案

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

关于java - Freemarker 模板的自省(introspection)或操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23790515/

相关文章:

com.sun.tools.javac.code.Symbol$ClassSymbol.isSubClass 处的 Javac 失败

java - 在java中将String转换为double时出现NullpointerException

java - 在不使用 javascript 的情况下单击 html 按钮时调用 java 方法

javascript - 如何使用 google.load 加载 javascript 文件而不是直接使用 freemarker 模板语言中的标签?

java - 我可以更改 Freemarker 中的默认变量定界符吗?

kotlin - 使用 Kotlinx 在 Ktor 中为按钮添加 onClick

java - 字符串转十六进制

java - jaxb2-basics-runtime NoSuchFieldError : INSTANCE when upgrading from 0. 6.4 到 1.11.1

java - JavaConfig 表示法中的 Spring freemarker 外部加载程序路径

freemarker - freemarker 中的“获取 30 天前”和 'one year ago' 日期