zoukankan      html  css  js  c++  java
  • freemarker模板加载TemplateLoader常见方式

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

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

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

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

    ClassTemplateLoader, FileTemplateLoader, MultiTemplateLoader, StringTemplateLoader, URLTemplateLoader, WebappTemplateLoader  

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

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

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

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

    Configuration cfg = new Configuration();  
                  
                TemplateLoader templateLoader=null;  
                String path="";  
                  
                templateLoader=new ClassTemplateLoader(PageTag.class,"templates/page/");  
                path="standardd.ftl";  
                  
                cfg.setTemplateLoader(templateLoader);  
                Template t=cfg.getTemplate(path,"UTF-8");  

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

    其它的加载器原理同上。

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

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

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

  • 相关阅读:
    触摸屏多媒体查询展示自主设计系统开发过程
    hashtable数据循环读取的顺序问题
    vs2010英文版打包中文框架出错的解决办法
    Silverlight游戏开发初探(上篇)
    PB之——编码规范
    时间相加 ,使用SQL完成
    PB(POWERBUILDER) 基础介绍
    PB之——流程控制
    PB之——基本数据类型
    PB [Grid风格数据窗口改变线条颜色] 的变通实现方法(也可以成为 带表头的Grid数据窗口)
  • 原文地址:https://www.cnblogs.com/chenfeng1122/p/6884576.html
Copyright © 2011-2022 走看看