java中Freemarker插值详解
java中Freemarker插值就是${...}或#{...}格式的部分,将使用数据模型中的部分替代输出。
通用插值${expr}
1. 插值结果为字符串值
直接输出表达式结果
2. 插值结果为数字值
根据默认格式(由#setting指令设置)将表达式结果转换成文本输出.可以使用内建的字符串函数格式化单个插值。
<#settion number_format="currency"/>
<#assign answer=42/>
${answer}
${answer?string}
${answer?string.number}
${answer?string.currency}
${answer?string.percent}
${answer}
执行输出结果:
$42.00 $42.00 42 $42.00 4,200%
3. 插值结果为日期值
根据默认格式(由#setting指令设置)将表达式结果转换成文本输出.可以使用内建的字符串函数格式化单个插值。
${lastUpdated?string("yyyy-MM-dd HH:mm:ss zzzz")} ${lastUpdated?string("EEE, MMM d, ''yy")} ${lastUpdated?string("EEEE, MMMM dd, yyyy, hh:mm:ss a '('zzz')'")}
执行输出结果:
2008-04-08 08:08:08 Pacific Daylight Time Tue, Apr 8, '03 Tuesday, April 08, 2003, 08:08:08 PM (PDT)
4. 插值结果为布尔值
根据默认格式(由#setting指令设置)将表达式结果转换成文本输出.可以使用内建的字符串函数格式化单个插值。
<#assign foo=true/> ${foo?string("yes", "no")}
执行输出结果:
yes
数字格式化插值:#{expr}或#{expr;format}
采用#{expr;format}形式来格式化数字,其中format可以是: 1. mX:小数部分最小X位 2. MX:小数部分最大X位。
<#assign x=2.582/> <#assign y=4/> #{x; M2} #{y; M2} #{x; m2} #{y; m2} #{x; m1M2} #{x; m1M2}
执行输出结果:
2.58 4 2.6 4.0 2.58 4.0
避免空值插值
!: 指定缺失变量的默认值
${sss!} <#--没有定义这个变量,默认值是空字符串! --> ${sss!"abc"} <#--没有定义这个变量,默认值是字符串abc! -->
??:判断变量是否存在
variable??,如果变量存在,返回true,否则返回false。
插值规则
a) 表达式放置在插值语法${}之中,用于输出表达式的值。
b) 表达式的值的类型可以是:字符串、 数字、布尔、日期时间、序列、Hash结构
c) 表达式支持Java中的所有运算符:
算术运算符:+、-、*、/、%
比较运算符:==(eq)、!=(ne)、>(gt)、>=(gte)、<(lt)、<=(lte)
逻辑运算符:&&(and)、||(or)、!(not)
三目运算符:? :
d) 内置函数:
Ⅰ) 使用方式:表达式?函数名[(实参)]
Ⅱ) 字符串的常用内置函数: substring(from[, to])、html、length、trim、url 示例:<#setting url_escaping_charset="UTF-8"> 、exp?url[("UTF-8")]
Ⅲ) 数字的常用内置函数:c、string[(数字模式串)]、
Ⅳ) 布尔的内置函数:string[("男", "女")]
Ⅴ) 内置的常用日期时间函数:string[("格式模式串")]、datetime、date、time
e) 序列:
在FTL中定义的序列:由方括号包括,各元素用英文逗号分隔如:<#assign seq=["winter", "spring", "summer", "autumn"]>也可以用数字范围(递增、反递增)定义数字序列: <#assign nums=101..105> 或 <#assign nums=105..101> 在数据模型中可以是List对象、Set对象,序列的常用内置函数:size、sort[("指定字段作排序依据")]
f) Hash结构:
在FTL文件中直接定义时:由大括号包括,由逗号分隔键/值列表,键和值之间用冒号分隔。键必须是字符串。如: <#assign scores={"语文":78, "数学":89, "英语":87}> ${scores.语文} 在数据模型中可以是Map对象,Hash结构的内置函数:size、keys、values
例子
${book.name?if_exists } //用于判断如果存在,就输出这个值 ${book.name!"xxx"}//默认值xxx ${book.date?string('yyyy-MM-dd')} //日期格式 ${book?string.number} 20 //三种不同的数字格式 ${book?string.currency} <#-- $20.00 --> ${book?string.percent} <#-- 20% --> ${.now?datetime}//当前时间戳
版权声明:本文为JAVASCHOOL原创文章,未经本站允许不得转载。