首页 > IT职业 > IT图书 > 模板引擎之------freemarker
FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
FreeMarker是免费的,基于Apache许可证2.0版本发布。其模板编写为FreeMarker Template Language(FTL),属于简单、专用的语言。需要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中,主要用于如何展现数据, 而在模板之外注意于要展示什么数据。
Freemarker是一个基于Java语言的模板引擎,不是web框架,是一个试图层的组件,主要用于解析服务器端的数据,并展示到视图层。
语法:
JAVA中常用的数据模型 :
基本类型数据(比如Integer)
封装的对象类型(比如User对象)
集合类型(List Map)
取值指令 :
常用${var}语法进行取值
对null、不存在对象取值${var!}
取包装对象的值,通过“点”语法:${User.name}
取值的时候进行计算,赋值
Date类型格式${data?String('yyyy-MM-dd')}
如何转义HTML内容:${var?html}
函数:
(一)处理字符串内建函数:
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 取list第一个值
last 取list最后一个值
seq_contains 这个序列是否包含
seq_index_of 这个序列所在的位置
size list长度
reverse 倒序
sort 升序排序
sort_by 根据属性排序
trunk 把字符串分块处理
(四)其他内建函数
is函数:判断变量的类型
is_string 字符串
is_number 整数
is_method 方法
() 对变量进行判断
hs_content 判断对象是否是空值,是不是有内容
eval 求值函数
更多语法,在这里不再列举
实例代码:
(一)
freemarker
取值:
- 整数:${intVar}
- 长整数:${LongVar}
- 双精度:${doubleVar}
- 字符串:${StringVar}
- 布尔值: ${booleanVar?string('yes','no')}
- 日期类型Java.Util.Date:${dateVar1?string('yyyy-MM-dd
HH:mm:ss')}
- 空值:${nullVar1!}
- 空值:${nullVar!'我是默认值'}
- 不存在的变量:${变量!'我是默认变量'}
- 不存在的变量1:${free!'我是默认变量'}
- 赋值&运算
a =
${a}
a+100=
${a+100}
(二)
freemarker
freemarker实现遍历list集合
- 集合list
${item}
#list>
if表达式
- if
var=99 #if>
var=99 var!=99#if>
99> <!-- > 大于 --> var大于99
var=99
var小于99 #if>
- if多条件 ||,&&,!
python or java
#if>
python length 6
#if> python length 6或者Java
#if> python length 6或者Java
#if>
(三)
freemarker
freemarker遍历map集合
- 集合map
${key}:${map[key]}
#list>
switch语句
- switch,case,break,default
星期一
星期二
星期三
星期四
星期五
星期六
星期日
无效的星期
#switch>
- switch,case,break,default
我是java
我是python
我是C语言
我是谁?谁是我?
#switch>
(四)
freemarker内建函数
内建函数
1,字符串内建函数
- ${item}
#list>
字符串转日期
- ${var1}
- ${var2}
- ${var3}
数字类型的内建函数
- 格式化:${numVar1?string("0.##")}
- 四舍五入:${numVar1?round}
- 去掉小数点:${numVar1?floor}
- 进1:${numVar1?ceiling}
list内建函数
- 分块处理取长度:${listVar1?chunk(4)?size}
- 长度:${listVar1?size}
- ${item}
#list>
- 取list第一个值:${listVar1?first}
- 取list最后一个值:${listVar1?last}
其他内建函数
- ${sVar?is_number?string('yes','no')}
- ${sVar?has_content?string('yes','no')}
- ${"1"+"2"?eval}
- ${(1+2)?eval}
- ${"1"+"2"?is_string?string('yes','no')}
- ${("1"+"2")?is_string?string('yes','no')}
(五)
Insert title here
macro,nested,return:实战demo
1.macro:宏指令
- FreeMarker:无参数的macro
我是无参数的macro
#macro>
- Freemarker2:有参数的macro
我是有参数的macro,paeam1=${param1},param2=${param2}
#macro>
- Freemarker3:有参数的macro
我是有参数的macro,paeam1=${param1},param2=${param2}
#macro>
- Freemarker4:有多个参数的macro
我是有参数的macro,paeam1=${param1},param2=${param2}
${paramExt['param3']}
${paramExt['param4']}
#macro>
2,nested
${param1}
#macro>
- 调用
hello ${loopVar1},${loopVar2}
@test>
hello ${loopVar1}
@test>
3,函数
#function>
- 调用
你好,我是调用${doAdd(100,100)}
更多代码在这里不再一一列举,感兴趣的朋友可以到我的github上下载源码。此代码基于SpringBoot实现,后台还有众多Java代码。感谢各位的支持!
源代码地址:
https://github.com/JavaCodeMood/freemarker
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/2766/viewspace-2798415/ ,如需转载,请注明出处,否则将追究法律责任。