首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >导入freemarker宏

导入freemarker宏
EN

Stack Overflow用户
提问于 2012-10-01 20:10:54
回答 1查看 3.4K关注 0票数 1

我的macros.txt文件是

代码语言:javascript
复制
<#macro macro1>
Helloworld.
</#macro>

我有另一个文件testMacro.txt。我想在testMacro.txt文件中使用这个宏。我尝试过以下几种方法

代码语言:javascript
复制
<#import "./macros.txt" as my>
<@my.macro1 />

但它似乎没有起作用。

在我使用模板文件的java文件中,我有(在我的MacroWorking.java中)

代码语言:javascript
复制
template = new Template(null,new FileReader("testMacro.txt"),new configuration());

例外情况是。

代码语言:javascript
复制
Exception in thread "main" java.lang.NullPointerException
at freemarker.core.LibraryLoad.<init>(LibraryLoad.java:82)
at freemarker.core.FMParser.Import(FMParser.java:1727)
at freemarker.core.FMParser.FreemarkerDirective(FMParser.java:2389)
at freemarker.core.FMParser.Content(FMParser.java:2618)
at freemarker.core.FMParser.OptionalBlock(FMParser.java:2786)
at freemarker.core.FMParser.Root(FMParser.java:2958)
at freemarker.template.Template.<init>(Template.java:149)
at freemarker.template.Template.<init>(Template.java:172)
at msjava.hdom.examples.DbQuery.main(MacroWorking.java:24)

MacroWorking.java的第24行就是上面给出的行。

编辑:使用相同的代码,但我的testMacro.txt只有文本作为HELLOWORLD,即没有导入语句,那么它工作得很好。我做什么好?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-02 02:46:36

这些模板没有问题,问题在于您使用FreeMarker的Java API的方式。

#import尝试解析./macros.txt路径时,它会尝试相对于当前模板的路径来解析它,但是由于模板是从Reader加载的,并且您已经传递了null作为模板名称(这与模板路径相同),所以它将遇到NPE的情况。这是一个不恰当的错误消息,但无论如何它都不能解析该路径,因为它不知道当前模板来自哪里(请记住,您只给了FreeMarker一个Reader )。正确的方法是:

代码语言:javascript
复制
Configuration cfg = new Configuration();
cfg.setDirectoryForTemplateLoading(new File("/where/you/store/the/templates"));

Template template = cfg.getTemplate("testMacro.txt");

现在,FreeMarker将模板的名称设置为testMacro.txt,并且还负责模板的加载和缓存。如果您仍然需要直接从Reader加载模板,您可以这样做:

代码语言:javascript
复制
Template template = new Template("testMacro.txt", new FileReader(...), cfg);

请注意非空模板名称。如果这是真实的,这并不重要,但它将用于解析模板中的相对路径。还要注意,因为FreeMarker使用虚拟路径,所以必须在Configuration中正确设置模板加载器。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12673005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档