1.基本的输出 基本输出:${student.name} (student的定义在本文末尾) 空值判断:${student.name?if_exists} 默认值: ${student.name?default(‘xxx’)} 或 ${ book.name!"xxx"} 日期格式:${student.birthday?string('yyyy-MM-dd')} 数字格式:${student.age?string.number} --> 20 boolean值:<#assign flag=ture /> ${flag?string("yes","no")} <#-- yes --> 每次输出的时候最好是带个默认值,否则没有被赋值的变量就会抛出异常,那个黄黄的freemarker出错页面,真是让人看了太难过了 3 逻辑判断 a:if else 形式 <#if condition> <#elseif condition2> <#else> </#if> 等于 = 大于 gt 小于 lt 大于等于 gte 小于等于 lte 使用方法很简单 <#if x gt 1> .. </#if> b:switch 形式 <#switch value> <#case refValue1> <#break> <#case refValue2> <#break> <#case refValueN> <#break> <#default> </#switch> 4 循环 遍历普通list: <#list someList as item> </#list> 遍历list的前面几项: <#assign x=3> <#list 1..x as i> ${i} </#list> 遍历map: <#list nameMap.keySet() as name> ${nameMap.get(name)} </#list> 或者 <#list nameMap?keys as name> ${nameMap.get(name)} </#list> list排序输出: <#list someList?sort_by(["name"]) as item> ${item.name} </#list> 按照属性name进行排序(默认升序) <#list somelist?sort_by(["name"])?reverse as item> ${item.name} </#list> 按照属性name进行降序排序 list指令还隐含了两个循环变量:item_index:当前迭代项在所有迭代项中的位置,是数字值。 item_has_next:用于判断当前迭代项是否是所有迭代项中的最后一项。 map 关于map的key,它必须是String,这个在一定程度上限制了后台程序对于map的表达。 5 宏 1 基本用法 宏是和某个变量关联的模板片断,以便在模板中通过用户定义指令使用该变量,下面是一个例子: <#macro greet> < font size="+2">Hello Joe!</font> </#macro> 调用宏时,与使用freemarker的其他指令类似,只是使用@替代FTL标记中的#: <@greet/> 2 在macro指令中可以在宏变量之后定义参数,如: <#macro greet x1 x2> < font size="+2" color="${x2}">Hello ${x1}!</font> </#macro> 可以这样使用该宏变量,其中参数的次序是无关的:<@greet x1="Fred" x2="black"/> 可以在定义参数时指定缺省值,否则,在调用宏的时候,必须对所有参数赋值: <#macro greet x1 x2r="black"> < font size="+2" color="${x2}">Hello ${x1}!</font> </#macro> 注意:宏的参数是局部变量,只能在宏定义中有效。