天天看点

Java:模版引擎FreeMarker

Java:模版引擎FreeMarker

FreeMarker Template Language (FTL)

文档:

依赖

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

使用示例

package com.pengshiyu;

import freemarker.template.Configuration;
import freemarker.template.Template;

import java.io.*;
import java.util.HashMap;
import java.util.Map;

public class FreemarkerDemo {

    public static void main(String[] args) throws Exception {
        // 第一步:配置freemarker
        Configuration configuration = new Configuration(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS);
        // 设置模板路径
        configuration.setDirectoryForTemplateLoading(new File("./"));

        // 第二步:加载模板
        Template template = configuration.getTemplate("template.ftl");

        // 第三步:模板数据
        Map<String, Object> data = new HashMap<>();
        data.put("name", "汤姆");
        data.put("age", 23);

        // 第四步:渲染输出
        // 输出到字符串
        Writer stringWriter = new StringWriter();
        template.process(data, stringWriter);
        stringWriter.close();
        System.out.println(stringWriter.toString());

        // 输出到文件
        Writer fileWriter = new FileWriter(new File("hello.html"));
        template.process(data, fileWriter);
        fileWriter.close();
    }
}
      

模板文件 template.ftl

<html>
    <head>
        <title>Demo</title>
    </head>
    <body>
        <p>${name}</p>
        <p>${age}</p>
    </body>
</html>      

输出结果 hello.html

<html>
    <head>
        <title>Demo</title>
    </head>
    <body>
        <p>汤姆</p>
        <p>23</p>
    </body>
</html>      

问题及解决

报错

严重: DefaultObjectWrapper.incompatibleImprovements was set to the object returned by Configuration.getVersion(). That defeats the purpose of incompatibleImprovements, and makes upgrading FreeMarker a potentially breaking change. Also, this probably won't be allowed starting from 2.4.0. Instead, set incompatibleImprovements to the highest concrete version that's known to be compatible with your application.      

解决方式

// 不推荐使用
Configuration configuration = new Configuration(Configuration.getVersion());

// 修改为:
Configuration configuration = new Configuration(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS);      

模板语法

<#-- 注释 取出变量 -->
Hello ${name}

<#-- if判断-->
<#if name == "Tom">
    <span>is Tom</span>
<#elseif name == "Jack">
    <span>is Jack</span>
<#else>
    <span>not is Tom</span>
</#if>

<#--for循环-->
<#list list as item>
    <p>${item.name} ${item.age}</p>
</#list>

<#-- 引入模板 -->
<#include "./footer.html">      

参考

FreeMarker 快速入门 SpringBoot整合FreeMarker模板报错