freemarker基本指令用法
1、if指令
//第一种用法
[#if 条件]
...
[/#if]
//第二种用法
[#if 条件]
...
[#else]
...
[/#if]
//第三种用法
[#if 条件]
...
[#elseif 条件]
...
[#else]
...
[/#if]
2、list指令
//第一种用法
[#list animals as animal]
...
[/#list]
//第二种用法
[#list animals]
//如果集合为空则不进list
...
[#items as animal]
//循环体
...
[/#items]
[/#list]
//第三种用法
[#list animals as animal]
$ {animal}
[#sep]//表示还有下一个实体时,执行显示,号
,
[/#sep]
[/#list]
//第四种用法
[#list animals as animal]
${animal}
[#sep],[/#sep]
[#else]//如果list元素为空则执行else
None
[/#list]
//第五种用法
[#list animals ]
...
[#items as animal]
${animal}[#sep] ...[/#sep]
[/#items]
[#else]
...
[/#list]
3、include指令
使用该include指令,您可以将另一个文件的内容插入到模板中。
[#include "/copyright_footer.html"]
4、使用内置插件
FreeMarker使用?启动调用内置插件
${user?upper_case} //字符串大写
${user?cap_first} //首字母大写
${user?length} //字符串长度
${animal.protected?string("Y", "N")} //返回字符串“Y”或“N”,具体取决于布尔值animal.protected
${user?starts_with("J")} //第一个字母是否是J
${1.1?int} //取整
//list 相关用法
${animals?size} //list大小
${fruits?join(", ")} //通过连接项目,并在每个项目之间插入参数分隔符(如“orange,banana”)将列表转换为字符串
[#list animals as animal]
${animal?index} //索引0开始
${animal?counter} //索引1开始
${animal?item_parity} //根据当前的计数器奇偶校验,给出字符串“奇数”或“偶数”。这通常用于着色具有交替颜色的行
[/#list]
内置插件是可以连接一起使用,例如:
${fruits?join(", ")?upper_case}
${1.1?int} //取整
5、处理缺失的变量
所谓缺失值的意思是:在FreeMarker的模型中不存在的变量,处理方式有两种:
- 设置默认值,关键符 !
${user! "visitor" } //如果user变量不存在则值就是visitor,否则就是${user}
备注:如果给一个对象的某个属性设置默认值应该 ${(user.name)!""},如果不加括号,那么如果user也是缺失值,那么FreeMarker会报错。
- 使用if判断是否是缺失变量,关键符号两个文号 ??
[#if user??]
//user变量存在
[/#if]
6、“. .”操作符
“…”用来表示一个范围,通常用于截取字符串和序列
start..end 包含开始和结束。例:0..5 相当于[0,5]
start..<end 和 start..!end 包含开始但不包含结束。例: 0..<5 相当于[0,)
start..*length 长度限制范围。例: 1..*5 相当于 1 2 3 4 5
start.. 右无界范围。这就像长度有限的范围,长度无限。例如,1.. 相当于 [1, 2, 3, 4, 5, 6, ... ]无限
“. .”操作符并不真正存储它们所包含的数字,因此例如0. .1并且 0. .100000000速度相同,占用的内存也相同。
该操作符可用于字符串操作和序列操作。例如:
- 字符串操作
//比如name=“freemarker”
${name[0..5]} //freema 截取前6个字符
${name[0..<5]} //freem 截取前5个字符
${name[0..*5]} //freem 截取前5个字符
${name[5..]} //arker 截取第6个字符及以后的字符
- 序列操作
[#list animals[0..5] as animal] ${animal.name} [/#list] //只循环前序列的前6个对象
[#list animals[0..<5] as animal] ${animal.name} [/#list] //只循环前序列的前5个对象
[#list animals[0..*5] as animal] ${animal.name} [/#list] //只循环前序列的前5个对象
[#list animals[5..] as animal] ${animal.name} [/#list] //只循环前序列的第6个及以后的对象
[#list animals[10..5] as animal] ${animal.name} [/#list] //循环下标为10到5的倒序,这种方法可以让序列倒序
[#list 0..10 as num] ${num} [/#list] //0~10的循环
7、r转义
如果你想直接在页面上显示“${name}”字符串就得使用r进行转义。例如
${r"${name}"} //直接输出${name}
8、assign关键字
assign用于自定义变量
例如:
- 定义一个字符串变量
[#assign name="freemarker"] //定义一个字符串
[#assign name="Hello ${user} !"]
[#assign name="free" + “marker”] //两个字符串拼接
- 定义一个序列
<#assign seq1 = ["abc","bcd","cde"]> //定义一个序列
<#assign seq2 = seq1 + ["efg"]> //两个序列拼接
<#assign seq3 = ["a",["b","c"],"d"]> //可以序列中可以包含任意类型
- 定义一个Hash
<#assign ages = {"Joe":23,"Fred"”:25}>
<#assign ages = {"Joe":23,"Fred":25} + {"Joe":30,"Fred":18}>
- 定义一个number变量
<#assign num = 25>
<#assign num = 25 + 10 * 12> //可以进行各种算数运算
更多用法参考:FreeMarker官方文档