freemarker的使用
- 格式:pdf
- 大小:84.70 KB
- 文档页数:3
freemarker的使⽤
⼀:freemarker是什么?
freemarker是⼀个模板引擎,基于定义的模板和数据⽣成对应的⽂本(HTML,xml,java等),是⼀个⽣成⽂本的⼯具。
⼆:freemarker的使⽤⽅法
(1)在⼯程中引⼊freemarker相关的依赖
View Code
(2)使⽤的步骤
第⼀步:创建⼀个Configuration对象,直接new⼀个即可,构造参数是freemarker的版本号
第⼆步:设置模板⽂件所在的路径,需要给出在磁盘上储存的全路径
第三步:设置⽣成的⽂件的编码格式,⼀般为utf-8格式
第四步:加载模板,创建模板对象
第五步:创建模板使⽤的数据集,可以使pojo也可以是map类型的
第六步:创建Write流对象,将⽂件⽂件输出,需要指定⽣成的⽂件的名称
第七步:调⽤模板的process⽅法,⽣成相应的⽂本
第⼋步:关闭流
@Test
public void genFile() throws Exception {
// 第⼀步:创建⼀个Configuration对象,直接new⼀个对象。构造⽅法的参数就是freemarker对于的版本号。
Configuration configuration = new Configuration(Configuration.getVersion());
// 第⼆步:设置模板⽂件所在的路径。
configuration.setDirectoryForTemplateLoading(new File("D:/workspace/item-web/src/main/webapp/WEB-INF/ftl"));
// 第三步:设置模板⽂件使⽤的字符集。⼀般就是utf-8.
configuration.setDefaultEncoding("utf-8");
// 第四步:加载⼀个模板,创建⼀个模板对象。
Template template = configuration.getTemplate("hello.ftl");
// 第五步:创建⼀个模板使⽤的数据集,可以是pojo也可以是map。⼀般是Map。
Map dataModel = new HashMap<>();
//向数据集中添加数据
dataModel.put("hello", "this is my first freemarker test.");
// 第六步:创建⼀个Writer对象,⼀般创建⼀FileWriter对象,指定⽣成的⽂件名。
Writer out = new FileWriter(new File("D:/temp/out/hello.html"));
// 第七步:调⽤模板对象的process⽅法输出⽂件。
template.process(dataModel, out);
// 第⼋步:关闭流。
out.close();
}
(3)模板的语法
1.访问map中的key
${key}即可获得对应的value值
2.访问pojo中的属性
以student对象为例: ${student.id} ${student.name}即可取得student对象中的id值和name值
3.去集合中的元素
例如:遍历学⽣对象集合,取出每⼀个学⽣的id值和name值
<#list studentList as student>
${student,id} ${student.name}
<#list>4.取集合中的下标
<#list studentList as student>
对象+下划线+index 即可获得下标值
${student_index}
<#list>
5.判断
<#list sutdnetList as student>
进⾏奇偶数的判断
<#if student_index % 2 ==0>
//偶数的处理过程
<#else>
//奇数的处理过程
<#if>
<#list>
6.⽇期类型的格式化
${date?date} 当前⽇期
${date?time} 当前时间
${date?datetime} 当前⽇期和时间
${date?string("yyyy-MM-dd hh:mm:ss")} 设置⽇期格式
7.NULL的处理
!对输出的控制处理,只输出,⽆返回值
${name} 如果name为空就会报错
${name!}如果name为空,不会报错,没有输出
${name!"默认值'} 如果name为空,就会输出默认值
${name!666}如果name为空,会输出666
${student.name}如果student或者name为空,报错
${student.name!"默认值"}如果student为空,会报错,name为空,输出默认值
测试是否为null,返回Boolean类型的值
product.color??将只测试color是否为null
(product.color)??将测试product和color是否存在null
??和?的区别
是判断对象是否为空,例如:<#if object??>object对象不为空(即object存在)#if>
后⾯要加内建函数名,例如:<#if object?exists>object对象不为空(即object存在)#if>
<#if str??>${str?string}#if><#--将str以字符串形式显⽰-->
8.include标签
<#include “模板名称“>
三:freemarker和spring的整合
(1)将Configuration对象的创建交给spring统⼀管理,为该对象注⼊两个属性,模板路径和⽂件的编码格式 class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
View Code
(2)进⾏测试
@Controller
public class HtmlGenController {
@Autowired
private FreeMarkerConfigurer freeMarkerConfigurer;
@RequestMapping("/genhtml")
@ResponseBody
public String genHtml()throws Exception {
// 1、从spring容器中获得FreeMarkerConfigurer对象。
// 2、从FreeMarkerConfigurer对象中获得Configuration对象。
Configuration configuration = freeMarkerConfigurer.getConfiguration();
// 3、使⽤Configuration对象获得Template对象。
Template template = configuration.getTemplate("hello.ftl");
// 4、创建数据集
Map dataModel = new HashMap<>();
dataModel.put("hello", "1000");
// 5、创建输出⽂件的Writer对象。
Writer out = new FileWriter(new File("D:/temp/term197/out/spring-freemarker.html"));
// 6、调⽤模板对象的process⽅法,⽣成⽂件。
template.process(dataModel, out);
// 7、关闭流。
out.close();
return "OK";
}
}
View Code
错误的地⽅希望⼤家指正。