zoukankan      html  css  js  c++  java
  • freemarker的使用

    一:freemarker是什么?

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

    二:freemarker的使用方法

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

    <dependency>
      <groupId>org.freemarker</groupId>
      <artifactId>freemarker</artifactId>
      <version>2.3.23</version>
    </dependency>
    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统一管理,为该对象注入两个属性,模板路径和文件的编码格式

    <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>
    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

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

  • 相关阅读:
    第二天课程档案
    第一天课程档案
    SAM初步
    计算几何初步
    数论二次总结
    生成函数入门题汇总
    1500: [NOI2005]维修数列
    20170214
    【bzoj2286】[Sdoi2011]消耗战
    bzoj2223: [Coci 2009]PATULJCI
  • 原文地址:https://www.cnblogs.com/shuai-server/p/8976958.html
Copyright © 2011-2022 走看看