freemarker报 java.io.FileNotFoundException:及TemplateLoader使用

Posted panchanggui

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了freemarker报 java.io.FileNotFoundException:及TemplateLoader使用相关的知识,希望对你有一定的参考价值。

  使用过freemarker的肯定其见过如下情况: 

1 java.io.FileNotFoundException: Template xxx.ftl not found.  



模板找不到。可能你会认为我明明指定了文件,并且文件存在,但是为什么就是说找不到呢? 
经过研究官方的API,原来freemarker在加载模板时,建议使用TemplateLoader,通过TemplateLoader指定从哪个目录开始加载模板,并且把模板加载在缓存中。 

   API的TemplateLoader是一个接口,他有如下几个实现类: 

1 ClassTemplateLoader, FileTemplateLoader, MultiTemplateLoader, StringTemplateLoader, URLTemplateLoader, WebappTemplateLoader 


   顾名思义,我们能从类名中猜想到freemarker的模板加载机制,举例说明两个: 

1:FileTemplateLoader 
  此是文件模板加载器,此即可以通过文件的绝对路径加载模板,如: 

1 TemplateLoader templateLoader=null;  
2            String path="";  
3              
4            //使用FileTemplateLoader  
5           templateLoader=new FileTemplateLoader(new File("项目根路径"));  
6           path="/WEB-INF/classes/com/xxx/tag/templates/page/xxx.ftl";  
7                          
8            cfg.setTemplateLoader(templateLoader);  
9            Template t=cfg.getTemplate(path,"UTF-8");

 

 

2:ClassTemplateLoader 
  此是通过指定类所在的目录来指定模板所在根路径,即指定类在哪个目录,那么这个目录就是加载模板文件的根目录,如下: 

 1 Configuration cfg = new Configuration();  
 2               
 3             TemplateLoader templateLoader=null;  
 4             String path="";  
 5               
 6             templateLoader=new ClassTemplateLoader(PageTag.class,"templates/page/");  
 7             path="standardd.ftl";  
 8               
 9             cfg.setTemplateLoader(templateLoader);  
10             Template t=cfg.getTemplate(path,"UTF-8"); 


此即表示比PageTag类所在的目录开始找,找这个目录下的templates/page/目录, 

其它的加载器原理同上, 

如果你是web项目,并且使用了spring,那么。你还可以通过spring来配置你模板文件的根目录,如下: 

1 <bean id="freemarkerConfig" class="org.springframework.ui.freemarker.FreeMarkerConfigurationFactoryBean">  
2     <property name="templateLoaderPath" value="/WEB-INF" />  
3      <property name="freemarkerSettings">  
4         <props>         
5             <prop key="defaultEncoding">UTF-8</prop>         
6         </props>         
7     </property>  
8 </bean> 

 

此即表示从WEB-INF目录下开始找。 

 

 

 

 

 

 

原文:http://zwllxs.iteye.com/blog/996244


















以上是关于freemarker报 java.io.FileNotFoundException:及TemplateLoader使用的主要内容,如果未能解决你的问题,请参考以下文章

生成ExtentTestNGIReporterListener报:java.lang.NoClassDefFoundError: freemarker

freemarker写select组件报错总结

freemarker写select组件报错总结

freemarker报 java.io.FileNotFoundException:及TemplateLoader使用

使用FreeMarker生成数据,模板明明没错却一直报错“The following has evaluated to null or missing:”

Web工程中使用Freemarker导出Word出错,XML文件中使用<#list abc as being></#list> 标记报错,不能识别。