FreeMarker中引入公共文件的两种方式
来源:互联网 发布:数据分析师的一天 编辑:程序博客网 时间:2024/05/17 06:27
这里简单叙述了一下<#include/>和<#import/>的用法
首先是自定义的工具类FreeMarkerUtil.java
package com.jadyer.util;import java.io.BufferedWriter;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.io.Writer;import java.util.Map;import freemarker.template.Configuration;import freemarker.template.Template;import freemarker.template.TemplateException;public class FreeMarkerUtil {/** * 获取指定目录下的模板文件 * @param name 模板文件的名称 * @param pathPrefix 模板文件的目录 */public Template getTemplate(String name, String pathPrefix) throws IOException{Configuration cfg = new Configuration(); //通过FreeMarker的Configuration对象可以读取ftl文件cfg.setClassForTemplateLoading(this.getClass(), pathPrefix); //设置模板文件的目录cfg.setDefaultEncoding("UTF-8"); //Set the default charset of the template filesTemplate temp = cfg.getTemplate(name); //在模板文件目录中寻找名为"name"的模板文件return temp; //此时FreeMarker就会到类路径下的"pathPrefix"文件夹中寻找名为"name"的模板文件}/** * 根据模板文件输出内容到控制台 * @param name 模板文件的名称 * @param pathPrefix 模板文件的目录 * @param rootMap 模板的数据模型 */public void print(String name, String pathPrefix, Map<String,Object> rootMap) throws TemplateException, IOException{this.getTemplate(name, pathPrefix).process(rootMap, new PrintWriter(System.out));}/** * 根据模板文件输出内容到指定的文件中 * @param name 模板文件的名称 * @param pathPrefix 模板文件的目录 * @param rootMap 模板的数据模型 * @param file 内容的输出文件 */public void printFile(String name, String pathPrefix, Map<String,Object> rootMap, File file) throws TemplateException, IOException{Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF-8"));this.getTemplate(name, pathPrefix).process(rootMap, out); //将模板文件内容以UTF-8编码输出到相应的流中if(null != out){out.close();}}}
这是位于//src//ftl//包中用于演示最后效果的theImport.ftl
<meta http-equiv="content-type" content="text/html; charset=UTF-8"><#-- 使用<#include/>可能会出现同名变量被覆盖的问题 --><#include "/inc/top.ftl"/><#include "/inc/body.ftl"/>${myblog}<#-- 可以使用<#import/>完成导入,并且加入名称空间 --><#import "/inc/top.ftl" as mytop/><#import "/inc/body.ftl" as mybody/>${mytop.myblog}${mybody.myblog}<#-- 访问名称空间中的自定义指令 --><@mytop.myIncMacro/><#-- 也可在定义模板变量时指定其所属的名称空间,且此时就必须使用"名称空间.变量名"的方法访问了 --><#-- 另外其所指定的名称空间不能凭空捏造,在本例中只能指定mytop or mybody --><#assign age=26 in mybody/>${mybody.age}
这是位于//src//ftl//inc//包中的公共文件top.ftl
<h2>Welcome ${visitor} to visit my blog</h2><hr/><#assign myblog="http://blog.csdn.net/jadyer"/><#macro myIncMacro>hello:inc macor</#macro>
这是位于//src//ftl//inc//包中的公共文件body.ftl
<#assign myblog="MyBlog—>http://blog.csdn.net/jadyer"/>
最后是用JUnit4.x写的测试类FreeMarkerTest.java
package com.jadyer.test;import java.io.File;import java.io.IOException;import java.util.HashMap;import java.util.Map;import org.junit.Test;import com.jadyer.util.FreeMarkerUtil;import freemarker.template.TemplateException;public class FreeMarkerTest {@Testpublic void printInc() throws TemplateException, IOException{Map<String,Object> rootMap = new HashMap<String,Object>();rootMap.put("visitor", "吴邪");new FreeMarkerUtil().print("theImport.ftl", "/ftl", rootMap);new FreeMarkerUtil().printFile("theImport.ftl", "/ftl", rootMap, new File("D:\\ftl\\my.html"));}}
- FreeMarker中引入公共文件的两种方式
- Laravel基础-两种方式引入公共文件
- iOS xib文件引入的两种方式
- spring引入非属性文件的两种方式
- 类的两种引入方式
- 引入XSD的两种方式
- PHP中引入文件的四种方式及区别
- html 如何引入一个公共的头部和底部(不使用模版引擎如jsp、freemarker、velocity的方式)
- struts中tdl文件的引入方式
- php中引入文件方式及引入的优先级
- spring 引入数据库配置(其他配置文件.properties)文件的两种方式
- 不同IE版本,引入不同的js文件。两种实现方式
- spring整合hibernate中sessionFactory的两种常用引入方式
- 引入js文件的几种方式
- react native 引入module的两种方式
- Android 引入so包的两种方式
- webpack成功引入d3 v4的两种方式
- AndroidStudio 引入so包的两种方式
- cygwin的工作机制
- 游戏开发常用算法2
- Hibernate学习笔记
- 如何选择集合
- 手机游戏开发常用排序算法
- FreeMarker中引入公共文件的两种方式
- 关于动态执行LAMBDA表达示
- Hibernate学习笔记2
- PDH和SDH区别
- 系统调用,及手动添加自己的系统调用
- IT人士成功的6大步骤
- 只基于标签的ibatis数据查询显示
- 一个字段下多个条件的查找
- 什么都不懂?不用怕!