freemarker是一款模板引擎,不是web框架,主要用于解析服务器端数据并展示在视图层。
数据模型+模板输出=HTML
基本运用
△java中常用数据类型:
1、基本类型+String
2、封装的对象类型
3、集合类型
△取值(插值)指令:
1、常用的${var}语法进行取值
2、对null、不存在的对象取值
${var!}
${var!'我是默认值'}
3、取包装对象的值,通过“点”语法:${User.name}
${(user.username)!} 括号对user 和username都进行空值判断,不加的话 ! 只对username属性进行空值判断
${(user.username)!'我是默认值'}
4、取值的时候进行计算、赋值
赋值:<#assign a=100/>
计算:${a + 200}
5、Date类型格式${date?string('yyyy-MM-dd')},对于java.sql.date 不需要转义
6、如何转义HTML内容${var?html}
支持富文本, 加?html 则输出原始内容
7、集合的取值
集合list遍历 <#list myList as item>
${item!}
</#list>
集合map遍历 <#list map?keys as key> map为map定义的key值
${key} ${map[key]} 前面是key值 后面是value值
</#list>
△逻辑指令 if ,switch:
1、if else
<#assign var=99>
<#if var==99>
<font color='red'>var=99</font>
<#else>
<font color='red'>var!=99</font>
</#if>
--------------------------------------------------------------------------------------------------------------------
大于小于判断 > <;
<#assign var=99>
<#if var > 99>
<font color='red'>var>99</font>
</#if>
--------------------------------------------------------------------------------------------------------------------
判断是否存在(if 两个??) ,然后遍历list。如何不存在 if 中间就不会执行 ,等同于<#if myList?exists>
<#if myList??>
<#list myList as item>
${item}
</#list>
</#if>
2、||,&&,!逻辑或 ,逻辑与, 逻辑非
<#assign var='python'>
<#if var=='java' || var=='python'>
<font>java or python</font>
</#if>
------------------------------------------------------------------------------------------
<#assign var='python'>
<#if var=='python' && var?length==5>
<font> python length</font>
</#if>
3、switch语法
<#assign var=10>
<#switch var>
<#case 10>
10<br>
<#break>
<#case 100>
100<br>
<#break>
<#default>
101<br>
</#swith>
高级技巧
△字符串、集合的操作
1、字符串常用内建函数
<#assign a='hello'>
<#assign b='world'>
连接 ${a+b}
截取 ${(a+b)?substring(5,8)} (含首不含尾)
长度 ${a?length}
大写 ${a?upper_case}
小写 ${a?lower_case}
下标 ${(a+b)?index_of('w')} w的下标
替换 ${(a+b)?replace('o','X')} 把o替换成X
△自定义函数
1、自定义函数 实现TemplateMethodModelEx接口,重写exec方法
2、list排序内建函数、常用指令
排序sort
<#assign myList=[4,5,1,7,3,9]/>
<#list myList? sort as item>
${item}
</#list>
------------------------------------------------------------------------------------------------
倒转revserse
<#assign myList=[4,5,1,7,3,9]/>
<#list myList? sort ?revserse as item>
${item}
</#list>
------------------------------------------------------------------------------------------------
${myList?size} list长度
${myList[3]} 取下标为3的值
3、常用内建函数
①处理字符串内建函数
substring 、cap_first、ends_with、contains 截取字符串、首字母大写、以什么什么结尾、是否包含某个元素
date 、datetime、time 如何把字符串准换成date datetime time 格式的内建函数
starts_with、index_of、last_index_of、split、trim 字符串以什么什么开始、字符串所在的位置、最后所在的位置、分割(得到的是数组)、去掉两头的空
②处理数字内建函数
string、x?string("0.##") 数字转字符串、转成小数点后两位的字符串
round、floor、ceiling 四舍五入、去掉小数点、进1变成整数
③处理LIST的内建函数
first、last、seq_contains、seq_index_of 取list第一个、取list最后一个、这个序列是否包含、这个序列所在位置
size、reverse、sort、sort_by 长度、倒转、排序、以对象某个属性排序
chunk 把这个list分块
④其他内建函数
is函数:is_string is_number is_method 是不是。。。
()、has_content
eval 求值
△自定义指令
@开头 需要在spring-servlet.xml中定义 实现TemplateDirectiveModel接口
△macro、function指令
宏macro、nested、return指令
macro语法:
<#macro macro_name param1 param2 paramN>
template_code ${param1} ${param2}
</#macro>
调用
<@macro_name param1="aa" param2="bb"/>
-----------------------------------------------------------
有默认参数的
<#macro_name param1='aaa' param2='bbb'>
nested_template${param1} ${param2}
</#macro>
调用
</@macro_name >
函数function、return指令
function 语法
<#function function _name param1 param2 paramN>
<#return param1 +param2 >
</#function>
调用
${function _name(100,100)}