FreeMarker基础知识汇总

  • 一.数据类型
  • 1.布尔类型
  • 2.日期类型
  • 3.数值类型
  • 4.字符串类型
  • 5.空值处理
  • 6.sequence类型
  • 6.1 数组类型
  • 6.2 List类型
  • 7.hash类型
  • 二.常用指令
  • 1.assign自定义变量指令
  • 2.if elseif else逻辑判断指令
  • 3.list遍历指令
  • 4.macro自定义指令
  • 5.nested占位指令
  • 6.import导入指令
  • 7.include包含指令
  • 三.FreeMarker页面静态化


一.数据类型

1.布尔类型

布尔类型不可以直接被打印

setAttribute("flag",true);
${flag?C} -------------------------打印true
${flag?string}---------------------打印true
${flag?string('yes',no)}-----------打印喜欢

2.日期类型

日期类型同样不可以被直接打印,需要转换为日期或者字符串.

setAttribute("date",new date());
${date?date}----------------------------打印当前日期
${date?time}----------------------------打印当前时间
${date?datetime}------------------------打印当前日期加时间
${date?String("yyyy/MM/dd HH:mm:ss)}----格式化日期打印

3.数值类型

数值类型可以直接打印

setAttribute("num",10000);
setAttribute("avg",0.5467);
${num?c}--------------------------------数字转换为普通字符转
${num?string.curremcy}------------------转换为货币类型字符串
${avg?string.percent}-------------------转换为百分比类型字符串
${avg?string[0.##]}---------------------保留两位小数

4.字符串类型

字符串类型可直接打印

setAttribute("msg","我在摸鱼");
${msg?substring(0,2)}--------------------截取字符串
${msg?uncap_first}-----------------------首字母转小写
${msg?cap_first}-------------------------首字母大写
${msg?upper_case}------------------------全部转大写
${msg?lower_case}------------------------全部转小写
${msg?length}----------------------------取字符串长度
${msg?start_with("我")?string}-----------是否以a开头
${msg?end_with("鱼")?string}-------------是否以a结尾
${msg?index_of("摸")}--------------------获取指定字符的索引
${msg?trim}------------------------------去除字符串前后空格
${msg?replace("我","你")}----------------我换成你

5.空值处理

${str}-----------------------------------会报错
${str!}----------------------------------处理成空字符串不报错
${str!"str的数字不存在"}------------------显示后面信息
${(str??)?c}-----------------------------返回布尔类型判断是否存在,若打印需转换为字符串

6.sequence类型

6.1 数组类型

String[] languages=new String[]{"java","c#","c","c++"};

<#list languages as lan>
	${lan}
<#list>----------------------------------循环打印字符串列表
${languages?size}------------------------获取序列的长度
${languages?first}-----------------------获取第一个元素
${languages?last}------------------------获取最后一个元素

6.2 List类型

List<String> cats=Array.asList("加菲猫","美短","英短","布偶");

<#list cats?reverse as cat>
	${cat}
</#list>----------------------------------倒序输出
<#list cats?sort as cat>
	${cat}
</#list>----------------------------------排序
<#list cats?sort?reverse as cat>
	${cat}
</#list>----------------------------------排序后倒叙输出

List<cat> cats;//猫咪实体类列表

<#list cats?sort_by("age") as cat>
	${cat.name}
</#list>----------------------------------根据年龄排序输出猫名字

7.hash类型

Map<String,String> catMap = new HashMap<>();
catMap.put("布偶","花色");
catMap.put("美短","深蓝条纹");
catMap.put("英短","蓝胖");

<#list catMap?keys as key>
	${key} - ${catMap[key]}
</#list>----------------------------------输出键值对

<#list catMap?values as value>
	${value} - 
</#list>----------------------------------只输出值

二.常用指令

1.assign自定义变量指令

使用assign指令创建或替换变量

//定义单个变量
<#assign str="hello">
${str}
//定义多个变量
<#assign num = 1 names=["张三","李四","王五"]>
${num}
${names?join(",")}

2.if elseif else逻辑判断指令

<#assign score=60>
//lt小于 lte小于等于 gt大于 gte大于等于
<#if score lt 60>
	摸鱼要偷偷的
	<#elseif score==60>
	<#else>
</#if>
<#if list??>
	数据存在
<#else>
	数据不为空
<#/if>

3.list遍历指令

<#assign numbers={"1","2","3","4"}
<#list users as user>
	${user}
</#list>

4.macro自定义指令

<#macro fish>
	究竟是谁在摸鱼!
<#/macro>
<@fish></@fish>
//自定义有参数指令,也可多参数
<macro queryTraitorBytime name>
	摸鱼的叛徒是${name}
</#macro>
<@queryTraitorBytime name="laowang></@queryTraitorBytime>
//打印乘法表
<#macro mult num>
	<#list 1..num as i>
		<#list 1..i as j>
			${j} * ${i}=${j*i}
		<#/list>
		<br>
	<#/list>
<#/macro>
<@mult num=9></@num>

5.nested占位指令

<#macro nest>
	<nested>
	我是哈哈哈
</#macro>

6.import导入指令

导入其他页面来引用其中方法

<# import "front.ftl" as page>
<@page.mult></@page.mult>

7.include包含指令

<#include "hello.html">
<#include "模板.ftl">
<#include "nihao.txt"

三.FreeMarker页面静态化

生成