FreeMarker_第1张图片
FreeMarker_第2张图片
此处的${username!} 如何username 是null 或者不存在使用!可以阻止异常抛出
此处的${item.birthday?string('yyyy-MM-dd')} 把生日 date 格式化输出
转义${var?string('yes','no')}
如何转义html内容 ${var?html} 把富文本当成文本输出

1.${date}此处的date如果是sql.date这样取值没问题如何使util.date会报错
因为freemarker是和数据库匹配的
util.date需要转义 ${date?string(' yyyy-MM-dd HH:mm:ss')}
2.对null处理 或者根本不存在的变量 都可以采取如何措施
${nullVar!'我是默认值'} 如果是null输出我是默认值
date存在进行转义不存在不转义
${date!?string(' yyyy-MM-dd HH:mm:ss')}
3.变量的定义赋值、运算
FreeMarker_第3张图片
4.封装的对象进行取值 比如user对象
FreeMarker_第4张图片
5.集合list的遍历
FreeMarker_第5张图片
6.集合map的遍历 通过key 键 来获取值
FreeMarker_第6张图片
7.if语法
7.1if语法

7.2if else语法
FreeMarker
FreeMarker_第7张图片
7.3 if elseif else语法 > 转义 大于号 >
FreeMarker_第8张图片
7.4 if 判 null
<#if mylist??> 等价于<#if mylist?exists> 判断 mylist是否存在
<#list mylist as item>
${item}
<#list>
<#if>
7.5 if多条件 ||,&&,!
FreeMarker_第9张图片
8.switch
FreeMarker_第10张图片
9.string的基本操作指令
<#assign a = 'hello'/>
<#assign b = 'world'/>
FreeMarker_第11张图片
10.自定义函数 对整数数组进行排序
FreeMarker_第12张图片
FreeMarker_第13张图片
FreeMarker_第14张图片
11.list排序內建函数及其指令
11.1正序
FreeMarker_第15张图片
输出结果
FreeMarker_第16张图片
11.2反转
FreeMarker_第17张图片
输出结果
FreeMarker_第18张图片
11.3list的长度
FreeMarker
11.4list 下标取值br/>![](https://s1.51cto.com/images/blog/201712/16/76e195aaabd9600e6faed7b9eaba7afb.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
12.自定义指令
自定义指令使用@
12.1页面
FreeMarker_第19张图片
输出结果
FreeMarker
12.2配置文件进行配置 在freemarker的config中配置 其中roleDirectiveModel是bean 次数是指向的注解 加载进来的
FreeMarker_第20张图片
FreeMarker_第21张图片
FreeMarker_第22张图片
12.3control层
FreeMarker_第23张图片
13.內建函数
13.1 split
FreeMarker_第24张图片
13.2字符串转日期
FreeMarker_第25张图片
13.3数字类型內建函数
FreeMarker_第26张图片
13.4 list內建函数
FreeMarker_第27张图片
13.5其他內建函数
FreeMarker_第28张图片
eval 变成整数
14.macro、function
14.1macro
FreeMarker_第29张图片
无参数
FreeMarker_第30张图片
有参数
FreeMarker_第31张图片
有默认值的
FreeMarker_第32张图片
多个传参数的
FreeMarker_第33张图片
14.2nested
输出结果
FreeMarker_第34张图片
代码
FreeMarker_第35张图片
14.3函数
输出结果
FreeMarker
代码
FreeMarker_第36张图片