如何解决从 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 举报,一经查实,本站将立刻删除。