注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

北漂的小羊

Java编程,开发者,程序员,软件开发,编程,代码。新浪微博号:IT国子监

 
 
 

日志

 
 
关于我

在这里是面向程序员的高品质IT技术学习社区,是程序员学习成长的地方。让我们更好地用技术改变世界。请关注新浪微博号: IT国子监(http://weibo.com/itguozijian)

网易考拉推荐

使用freemarker报 java.io.FileNotFoundException:(TemplateLoader、ClassTemplateLoader、FileTemplateLoader 使用)  

2013-01-08 18:30:38|  分类: JAVA |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
使用过freemarker的肯定其见过如下情况: 
Java代码 
  1. java.io.FileNotFoundException: Template xxx.ftl not found.  


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

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

Java代码 
  1. ClassTemplateLoader, FileTemplateLoader, MultiTemplateLoader, StringTemplateLoader, URLTemplateLoader, WebappTemplateLoader  


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

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

Java代码
  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 
  此是通过指定类所在的目录来指定模板所在根路径,即指定类在哪个目录,那么这个目录就是加载模板文件的根目录,如下: 

Java代码 
  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来配置你模板文件的根目录,如下: 


Java代码 
  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目录下开始找。 
  评论这张
 
阅读(895)| 评论(2)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016