一、快速入门
1.1、什么是freemarker?
Freemarker是一种模板引擎,而不是web框架。主要用于解析服务器端的数据,并解析在视图层。
1.2、freemarker运行流程
在java类中定义变量,在html或者ftl前端页面中通过$取到变量进行填充赋值,最后进行展示。
freemarker运行流程
1.3、maven构件freemarker项目
1.3.1、添加pom依赖
4.2.5.RELEASE2.3.22junitjunit4.11testorg.springframeworkspring-core${spring.version}org.springframeworkspring-beans${spring.version}org.springframeworkspring-aop${spring.version}org.springframeworkspring-context${spring.version}org.springframeworkspring-web${spring.version}org.springframeworkspring-webmvc${spring.version}org.springframeworkspring-test${spring.version}org.springframeworkspring-context-support${spring.version}org.freemarkerfreemarker${freemarker.version}commons-fileuploadcommons-fileupload1.3.3
1.3.2、web.xml文件配置
1.3.3、applicationContext.xml
1.3.4、spring-servlet.xml
1.3.5、测试代码和结果
1.4、列表展示
1.4.1、前台通过list进行展示
1.4.2、后台把多个人员信息做为list返回
二、基础入门
2.1、基础数据类型的取值
Java中有8中基本数据类型,如需对基本数据类型取值直接用${变量名}即可,见如下例子
看输出结果,我们不难发现对于boolean类型的变量,并没有在前台输出true或者false,这是因为freemarker不支持这种形式的显示,会直接抛出异常。有如下俩种解决方案,一种是在配置文件中配置yes,no或者在前台写成如下格式:${boolval?string('yes','no')}
2.2、date类型取值
对于date类型有俩种转义方式,一种是在配置文件进行设置,如下图,但是这种方式后台返回的date类型需要是java.sql包下面的,而不能是java.util包下面的,否则会报错
另外一种可以在前台页面进行转义,如:${val.birthday?string("yyyy-MM-dd")}
2.3、空值
开发过程中难免遇到后台返回值为null,如果不做处理,会直接抛出异常,为了避免这种情况可以在变量名后面加一个“!”,或者针对变量根本不存在的情况,也可以加!号避免异常,同时可以在“!”后面加一个值,作为变量为空的默认值
三、技能进阶
3.1、变量的定义、赋值、运算
s的值为:${s!}s+100:${s+100}
3.2、集合list遍历
${val.username}的出生日期是${val.birthday?string("yyyy-MM-dd")} #list>3.3、集合Map遍历
${key}:${map{key}}>
#list>
3.4、if语法
#if>
判断变量是否存在写法一: 写法二:
3.5、switch语法
freemarker switch语法和Java类似,不加break时,每一个都会输出. 不设置default时,默认最后一个case为default。
四、高级进阶
4.1、string的基本操作指令
4.2、自定义函数
以简单的整型数据排序为例
4.2.1、在前台调用排序方法
4.2.2、在控制层定义排序方法
mv.addObject("sort ",new SortMethod());
4.2.3、SortMethod扩展了Freemarker的TemplateMethodModelEx,重写exec方法
4.3、内建函数
4.2中我们以自定义函数实现了list的排序,其实可以调用freemarker的内置函数排序: ,加上reverse表示倒序,取list下标:${item_index},取list长度:${myList?size} list长度,取某个下标的值:${myList[3]}
4.3.1、处理字符串内建函数
subtring:对字符截取长度
cap_first:将字符串的第一个首字母变成大写
ends_with:以什么结尾
contains:是否包含目标字符串
date,datetime,time:将字符串转换为date,datetime,time日期类型
stars_with:以什么开始
index_of:某个字符在某个字符串中从头(0)开始第一次出现的第几个位置(即索引) last_index_of:某个字符在某个字符串中从尾(字符串.length-1)开始第一次出现的第几个位置(即索引)
split:以某个符号为分隔,将其结果封装成一个数组
tirm:去掉字符串首位的空格
4.3.2、处理数字的内建函数
x?string("0.##") 对数字进行格式化,四舍五入
round 四舍五入
floor 把小数点去掉
ceiling 数字进1,变成整数
4.3.3、处理list的内建函数
first 取list第一个值
last 取list最后一个值
seq_contains 这个序列是否包含
seq_index_of 这个序列所在的位置
size list长度
reverse 倒序
sort 升序排序
sort_by 根据属性排序
chunk 把字符串分块处理
4.3.4、其他内建函数
is_string 字符串
is_number 整数
is_method 方法
() 对变量进行判断
hs_content 判断对象是否是空值,是不是有内容
eval 求值函数
4.4、自定义指令
自定义指令以@开头,入参使用key-value格式,出参用逗号间隔,出参和入参用分号间隔,如:
role需要在配置文件进行配置:
具体的类需要实现TemplateDirectiveModel接口