问题描述
我试图在个人 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
。