freemarker的使用

一:freemarker是什么?

freemarker是一个模板引擎,基于定义的模板和数据生成对应的文本(HTML,xml,java等),是一个生成文本的工具。

二:freemarker的使用方法

(1)在工程中引入freemarker相关的依赖

<dependency>
  <groupId>org.freemarker</groupId>
  <artifactId>freemarker</artifactId>
  <version>2.3.23</version>
</dependency>

(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统一管理,为该对象注入两个属性,模板路径和文件的编码格式

<bean id="freemarkerConfig"
        class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
        <property name="templateLoaderPath" value="/WEB-INF/ftl/" />
        <property name="defaultEncoding" value="UTF-8" />
    </bean>

(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";
    }
}

错误的地方希望大家指正。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏性能与架构

快速了解 YAML

什么是 YAML? YAML 是一个数据序列化的标准,适用于所有开发语言,最大的特点是可读性好 YAML 的一个主要应用方向就是编写配置文件,有非常多的系统和框...

42850
来自专栏用户2442861的专栏

linux sed命令使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haluoluo211/article/d...

10620
来自专栏游戏杂谈

Node.js文件编码格式的转换

项目很多 lua 文件不是 utf-8格式,使用 EditPlus 查看的时候,显示为ASCII。还有的是带BOM的,带BOM倒好处理,之前写过,有一定规律。

24240
来自专栏Dawnzhang的开发者手册

easyui 进阶之表单校验、自定义校验

easyui是一种基于jQuery的用户界面插件集合,它为创建现代化,互动,JavaScript应用程序,提供必要的功能,完美支持HTML5网页的完整框架,节省...

18720
来自专栏北京马哥教育

sed的基本用法详解

在Linux的世界中,有着一个文本三剑客的称呼,它们分别代表grep(文本过滤),sed(流编辑器),awk(gawk)(报告生成器)。 它们是强大的文本处...

29760
来自专栏开发与安全

《鸟哥的linux私房菜》基本命令笔记

1.以前没注意过的,略写的命令option后面只能空格后加参数,而标准option即可以空格也可以等号后跟着参数,如date命令,date -r filenam...

25460
来自专栏云瓣

Node.js 异步异闻录

提到 Node.js, 我们脑海就会浮现异步、非阻塞、单线程等关键词,进一步我们还会想到 buffer、模块机制、事件循环、进程、V8、libuv 等知识点。本...

42680
来自专栏阮一峰的网络日志

Javascript 严格模式详解

一、概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode)。顾名思义,这种模式使得Javascript在更...

29980
来自专栏博客园

Asp.Net Web API(三)

    在Asp.Net Web API中,一个控制器就是一个处理HTTP请求的类,控制器的public方法就被叫做action方法或简单的Action。当We...

18250
来自专栏帅小子的日常

freemarker的使用

16320

扫码关注云+社区

领取腾讯云代金券