2011-01-17 10:4631788人閱讀評(píng)論(5)收藏舉報(bào)
freemarkeruserlistdaoobjectstring
原文地址:Freemarker中如何遍歷List作者:冰天雪地
Freemarker中如何遍歷List(附源碼)
關(guān)鍵詞(Keyword):Freemarker,Freemarker遍歷list
在Freemarker應(yīng)用中經(jīng)常會(huì)遍歷List獲取需要的數(shù)據(jù),并對(duì)需要的數(shù)據(jù)進(jìn)行排序加工后呈現(xiàn)給用戶。那么在Freemarker中如何遍歷List忧设,并對(duì)List中數(shù)據(jù)進(jìn)行適當(dāng)?shù)呐判蚰兀?/p>
通過(guò)下文的介紹关斜,相信您一定會(huì)找到答案甫匹。
一挪钓、Freemarker中l(wèi)ist指令簡(jiǎn)單介紹
要想在Freemarker中遍歷list,必須通過(guò)使用list指令,即<#list sequence as item>…
sequence是集合(collection)的表達(dá)式夹界,item是循環(huán)變量的名字飘千,不能是表達(dá)式。
當(dāng)在遍歷sequence時(shí)伞芹,會(huì)將遍歷變量的值保存到item中忘苛。
舉個(gè)例子說(shuō)明吧:
<#list userList as user>…
userList中封裝了很多個(gè)User對(duì)象,我們?cè)诒闅vuserList時(shí)候唱较,會(huì)將遍歷的User對(duì)象的值扎唾,保存到上述的user變量中。那么在取值時(shí)南缓,我們可以通過(guò)${user.userName }來(lái)獲取User對(duì)象的userName屬性值胸遇。List指令還隱含了兩個(gè)循環(huán)變量:
item_index:當(dāng)前迭代項(xiàng)在所有迭代項(xiàng)中的位置,是數(shù)字值汉形。
item_has_next:用于判斷當(dāng)前迭代項(xiàng)是否是所有迭代項(xiàng)中的最后一項(xiàng)纸镊。
注意:在使用上述兩個(gè)循環(huán)變量時(shí)倍阐,一定要將item換成你自己定義的循環(huán)變量名,item其實(shí)就是前綴罷了。
例如逗威,如果你使用<# list list as l>..定義峰搪,那么就要使用l_index,l_has_next。在循環(huán)過(guò)程中凯旭,如果您想跳出循環(huán)概耻,那么可以使用結(jié)合break指令,即<#break>來(lái)完成尽纽。
二、Freemarker中對(duì)List進(jìn)行排序
通常我們的排序操作都是通過(guò)DAO層來(lái)實(shí)現(xiàn)的童漩,如果我們想隨時(shí)更改我們的排序弄贿,那么就必須修改我們的DAO層代碼,確實(shí)不方便矫膨。但Freemarker為我們提供了這樣的排序方法差凹,解決了這個(gè)問(wèn)題。
1.sort升序排序函數(shù)
sort對(duì)序列(sequence)進(jìn)行排序侧馅,要求序列中的變量必須是:字符串(按首字母排序),數(shù)字危尿,日期值。
<#list list?sort as l>…
2.sort_by函數(shù)
sort_by有一個(gè)參數(shù),該參數(shù)用于指定想要排序的子變量馁痴,排序是按照變量對(duì)應(yīng)的值進(jìn)行排序,如:
<#list userList?sort_by(“age”) as user>…
age是User對(duì)象的屬性谊娇,排序是按age的值進(jìn)行的。
3.reverse降序排序函數(shù)<#list list? reverse as l>…罗晕。reverse使用同sort相同济欢。reverse還可以同sort_by一起使用
如:想讓用戶按年齡降序排序,那么可以這個(gè)樣寫(xiě)<#list userList?sort_by(“age”)?reverse as user>…
三小渊、Freemarker如何遍歷List實(shí)例應(yīng)用
創(chuàng)通過(guò)上面的介紹法褥,相信您已經(jīng)對(duì)Freemarker如何遍歷List有了了解,那么我們就廢話少說(shuō)酬屉,開(kāi)始做一個(gè)應(yīng)用吧半等。
User類
public class User{private String username;private(省略set和get方法)
}
user.ftl
<#--Freemarker遍歷list-->
簡(jiǎn)單遍歷list:
<#list userList as user>用戶名:${user.userName}密碼:${user.userPassword}年齡: ${user.age}
<#--Freemarker遍歷list并應(yīng)用list隱含變量item_index-->
item_index使用:
<#list userList as user>
第${user_index+1}個(gè)用戶用戶名:${user.userName}密碼:${user.userPassword}年齡: ${user.age}
<#--Freemarker遍歷list并應(yīng)用list隱含變量item_has_next-->
item_has_next,size使用:
<#list userList as user>
用戶名:${user.userName}密碼:${user.userPassword}年齡: ${user.age}<#if !user_has_next>共有${userList?size}最后一個(gè)用戶是:${user.userName}
<#--Freemarker遍歷list并按用戶年齡升序排序-->
按用戶年齡升序排序:
<#list userList?sort_by("age") as user>
用戶名:${user.userName}密碼:${user.userPassword}年齡: ${user.age}
<#--Freemarker遍歷list并按用戶年齡降序排序-->
按用戶年齡降序排序:
<#list userList?sort_by("age")?reverse as user>
用戶名:${user.userName}密碼:${user.userPassword}年齡: ${user.age}
<#--Freemarker遍歷list當(dāng)用戶年齡大于21歲時(shí),停止輸出-->
list中應(yīng)用break:
<#list userList?sort_by("age")?reverse as user>
用戶名:${user.userName}密碼:${user.userPassword}年齡: ${user.age}<#if (user.age>21) ><#break>
ClientTest類
public class ClientTest{public static List initUserList(){
User user1=new User();user1.setUserName("張三");user1.setUserPassword("123");user1.setAge(20);User user2=new User();user2.setUserName("李四");user2.setUserPassword("123");user2.setAge(22);User user3=new User();user3.setUserName("王五");user3.setUserPassword("123");user3.setAge(21);
List list=new ArrayList();list.add(user1);list.add(user2);
list.add(user3);
return list;
}
public static void main(String[] args){List list=ClientTest.initUserList();
Map root=new HashMap();
root.put(“userList”,list);FreeMarkertUtil.analysisTemplate(“user.ftl”,”UTF-8”,root);
//FreeMarkUtil類可以參考我上傳得源碼呐萨。
}
}
好了杀饵,到這里程序就結(jié)束了,您可以運(yùn)行ClientTest類來(lái)查看輸出結(jié)果了谬擦。
希望通過(guò)本文的介紹凹髓,可以讓您對(duì)FreeMarker如何遍歷List有一個(gè)清楚的了解。