关于使用freemarker的一些心得体会
在项目上配置使用freemarker很简单,只需引入一个包即可,也可跟springMVC,struts等框架整合使用,它是一款很好的模板引擎。
常用指令有:
if指令
<#if condition>...<#elseif condition2> ...<#else> ...</#if>
list指令
<#list sequence as item>...<#break>...</#list>其中item_index:当前变量的索引值, item_has_next:是否存在下一个对象
include指令
<#include path> or <#include path options> 其中options:encoding=encoding,parse=parse
macro指令
<#macro name param1 param2 ... paramN></#macro> 引用:<@name param1>
assign指令
<#assign name = ‘test’ />
switch 指令
<#switch value>
<#case refValue>
...
<#bread>
<#case refValue>
...
<#bread>
<#default>
...
</#switch>
import指令
<#import path as mapObject>
其中:
path 指定要被导入的模板文件,如"/lib/common.ftl"
mapObject是一个Map对象名,通过这行代码,将导致path模板中的 所有变量都被放置在mapObject中
noparse指令
<#noparse> ${user}</#noparse> 结果输出:${user}
基本操作可参考文章:http://www.blogjava.net/kxbin/articles/366505.html
一些常用技巧:
1、判断某个值是否存在 如: <#if a?? >或 <#if a?exists>
2、如果元素取不到值就使用默认值 如: ${a!1}或${a?default(1)}
3、使用括号来防止空值异常 如: a、b为空值,${(a+b)!0}或${a!0+b!0}
4、善用集合的内置方法 如:${sequence?first}、 ${sequence?last} ${sequence? reverse} 、${sequence? sort} 、${sequence?sort_by(value) }
5、善用map的内置方法 如:${hash?keys}、${hash?values}
6、自定义布尔值输出 如:${foo?string("是foo","非foo")}
7、WEB开发中获取request、response等值
如: ${Request ["a"]} ${RequestParameters["a"]} ${Session ["a"]} ${Application ["a"]}
8、导入第三方标签库
<#assign s=JspTaglibs["/WEB-INF/struts-tags.tld"] />
9:页面上直接引用类和类的方法
如:引用枚举值<#assign shareTypeArr=stack.findValue("@com.test.lottery.common.ShareType@values()") />
调用方法<#list shareTypeArr as shareType>${shareType. valueOfOrdinal(0)}</#list>
10:freemarker允许的输出map的key值一般是string类型
如控制器输出的map为{1:"test1", 2:"test2"},页面引用${map[1]}是取不到值的;
如控制器输出的map为{"1":"test1"," 2":"test2"},页面引用${map["1"]}是可取到值。

浙公网安备 33010602011771号