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目录下开始找。 

  • 相关阅读:
    python --(链表)
    Cocos Creator_继承组件单例
    JDK丨WIN10配置JDK1.8 (解决javac不是内部或外部命令,也不是可运行的程序或批处理文件)
    debug apk logCat
    JavaScript 当前URL取参返回字典
    Javascript扩展String.prototype实现格式金额、格式时间、字符串连接、计算长度、是否包含、日期计算等功能
    cocos2d JS 源生js实现each方法
    Cocos Creator 动态设置Canvas的宽度与高度,更改适配
    JavaScript 判断是PC端还是移动端
    cocos creator使用anysdk接入admob广告教程
  • 原文地址:https://www.cnblogs.com/chenfeng1122/p/6884576.html
Copyright © 2011-2022 走看看