【freemarker】freemarker学习笔记

Freemarker学习笔记

​ Freemarker是使用java编写的一个模版引擎框架,网页静态化的解决方案。也可以用来生成xml,jsp和java。

一、模版文件

​ 创建freemarker模版文件用于生成html文件。模版文件包含文本注释插值指令

  • 文本:直接输出的部分。
  • 注释:即<#-- ...... -->格式,不会输出。
  • 插值:即${...}部分。用数据模型中的数据代替输出。
  • 指令:和html代码类似,<# >开头#,予以区分。
二、指令
  1. <#assign name="值">在模版中定义一个变量,name是变量名。可以用${name}来获取变量的值。

    <#assign name="王先森">

    欢迎,${name}

  2. <#include "文件路径">,引入文件。

  3. <#if> <#elseif> <#else>条件指令

    <#if num==1>

    是1,执行此处

    <#elseif num==2>

    是2,执行此处

    <#else>

    否则执行此处

    </#if>

  4. <#list>循环 goodsList是集合,goods是循环的每个对象。${goods_index}固定语法,取下标。

    <#list goodsList as goods>

    ${goods.name}

    </#list>

三、内建函数
  1. size:获取集合长度。freemarker中的函数使用"?"来调用而不是“.”

    ${goods?size} <#-- freemarker中的函数使用"?"来调用而不是“.” -->

  2. eval:转换

    <#assign text="{'bank':'工商银行', 'account': '123454566'}"> <#-- 定义一个text字符串 -->

    <#assign data=text?eval> <#-- 把text转换为对象赋值给data -->

    开户行:${data.bank} 帐号:${data.account}

  3. 日期格式化行数。

    java代码中定义一个日期 map.put("tody", new Date());

    freemarker代码:

    ${tody?date} <#-- 只显示日期 -->

    ${tody?time} <#-- 只显示时间 -->

    ${tody?datetime} <#-- 显示日期和时间 -->

    ${tody?string('yyyy年MM月')} <#-- 日期格式化,按照定义个格式输出日期 -->

  4. 数字格式化

    定义参数data为12345678

    ${data} <#-- 会输出12,345,678。会按照金额的方式显示 -->

    ${data?c} <#-- 输出12345678,正常显示 -->

四、控制处理运算符

​ 在freemarker中,如果变量值是空则会抛出异常。但是有些变量就是null值,该怎样解决呢?

  1. variable??,如果变量存在返回true,否则返回false。

    <#if aa??>

    aa变量存在

    <#else>

    aa变量不存在

    </#if>

  2. variable!''感叹号后面可以是空字符串,也可以设置默认值。

    ${aaa!"aa"} <#-- 如果aaa不存在则输出aa -->

五、运算符
  1. 算数运算符。

    freemarker中支持算数运算符,包括:+ - * / %

  2. 逻辑运算符,逻辑运算符只能作用于布尔值,否则会产生错误。

    • &&:逻辑与
    • || :逻辑或
    • ! :逻辑非
  3. 比较运算符。

    • =或者==:判断两个值是否相等。
    • !=:判断两个值是否不等。
    • >或&gt:判断是否大于。
    • <或&lt:判断是否小于。
    • <=或&lte:判断是否小于等于。

    注意:=和!=判断两边必须是相同类型的值,否则会报错。

六、创建一个demo来生成freemarker模版。
  • 创建一个maven项目。引入freemarkerjar包。

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

  • 新建一个模版文件test.ftl,一般以.ftl后缀结尾。

    <!DOCTYPE html>
    <html>
    <head>
    <title>测试freemarker</title>
    <meta charset="UTF-8">
    <body>
    <h1>这是一个Freemarker测试模版</h1>
    <span>${name},你好!!${message}</span>
    <#assign name="值">
    hello,${name}
    </body>
    </head>
    </html>

  • 创建freemarker的配置文件。

package com.wj.test;

import java.io.File;
import java.io.FileWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;

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

public class FreemarkerConfiguration {
public static void main(String[] args) throws Exception {
// 创建一个配置对象
Configuration configuration = new Configuration(Configuration.getVersion());
// 设置模版所在目录
configuration.setDirectoryForTemplateLoading(new File("D:\\workspace\\test_workspace\\freemarker-demo\\src\\main\\resources"));
// 设置字符集
configuration.setDefaultEncoding("UTF-8");
// 获取模版对象
Template template = configuration.getTemplate("test.ftl");
// 创建数据模型,可以是对象,也可以是map
Map<String, String> map = new HashMap<String, String>();
map.put("name", "WJ");
map.put("message", "欢迎使用Freemarker");
// 创建输出流对象
Writer out = new FileWriter("D:\\test.html");
// 输出
template.process(map, out);
System.out.println("生成成功");
// 关闭out
out.close();
}
}

这样就可以在指定的文件夹中生成自己定义的freemarker模版。

posted @ 2018-12-23 17:36  搬山巨猿  阅读(337)  评论(0)    收藏  举报