微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从 FreeMarker 中的模板字符串中获取所有依赖项名称甚至是多级继承的列表

如何解决从 FreeMarker 中的模板字符串中获取所有依赖项名称甚至是多级继承的列表

我试图在个人 Maven 项目中使用 FreeMarker 模板引擎。

我想问一下 FreeMarker 是否有一个公共方法,如果将模板主体作为字符串,它可以返回所有依赖模板名称的列表(使用 #import 和 #include 指令)。

如果是这样,能否请您指出代码库中与此相关的正确部分? 即使没有这样的公共方法,能否请您指出实现此目的的私有方法

我不确定是否有办法在 FreeMarker 中以任何方式更改指令的名称(例如 bash 中的别名?或者 C++ 中的“使用”声明,或者 FreeMarker 中的任何用户定义指令)。 如果有,编写这样一个简单的解析器可能会有错误,因为如果它没有找到 <#import><#include> 指令,我们将不会得到依赖模板名称,如别名或用户定义的指令。>

那么有什么我需要特别注意的事情吗?或者我可以使用 String.indexOf()String.substring() 方法编写自己的简单解析器吗?

谢谢!

解决方法

FreeMarker 在运行时几乎可以做所有事情(除了基本解析),包括 #include-s 和 #imports 的解析。因此,您可以拥有 <#include someVariable><#if condition><#include "this.ftl"></#if> 等内容。因此,通常无法确定模板具有哪些依赖项,因此也没有专用 API。有一个未发布的 API 来遍历 AST(从 Template.getRootTreeNode() 开始),然后您可以尝试猜测,希望您的模板在这方面不会很棘手。 (是的,它是 @deprecated,但没关系,在这一点上,它肯定不会从 2.x 中删除。)

关于别名。宏、函数、方法都只是模板语言的值。因此,您可以执行 <#assign mm = myImport.MyMacro>,然后像使用 mm 一样使用 myImport.MyMacro

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?