Freemarker插值详解 Freemarker 自定义标签详解 Maven+SpringMVC+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}//当前时间戳 Freemarker 自定义标签详解 Maven+SpringMVC+Freemarker教程