Freemarker中如何遍歷list

Freemarker中如何遍歷List(附源碼)
關鍵詞(Keyword):Freemarker,Freemarker遍歷list
在Freemarker應用中經常會遍歷List獲取需要的數據,並對需要的數據進行排序加工後呈現給用戶。那麼在Freemarker中如何遍歷List,並對List中數據進行適當的排序呢?
通過下文的介紹,相信您一定會找到答案。
一、 
 
Freemarker中list指令簡單介紹
要想在Freemarker中遍歷list,必須通過使用list指令,即<#list sequence as item>…</#list>
sequence是集合(collection)的表達式,item是循環變量的名字,不能是表達式。
當在遍歷sequence時,會將遍歷變量的值保存到item中。
舉個例子說明吧:
<#list userList as user>
 
 

</#list>
 
 
userList中封裝了很多個User對象,我們在遍歷userList時候,會將遍歷的User對象的值,保存到上述的user變量中。那麼在取值時,我們可以通過${user.userName }來獲取User對象的userName屬性值。
 
 
List指令還隱含了兩個循環變量:
item_index:當前迭代項在所有迭代項中的位置,是數字值。
item_has_next:用於判斷當前迭代項是否是所有迭代項中的最後一項。
注意:在使用上述兩個循環變量時,一定要將item換成你自己定義的循環變量名,item其實就是前綴罷了。
例如,如果你使用<# list list as l>..</#list>定義,那麼就要使用l_index,l_has_next。
 
 

 
 
在循環過程中,如果您想跳出循環,那麼可以使用結合break指令,即<#break>來完成。
二、 
 
Freemarker中對List進行排序
通常我們的排序操作都是通過DAO層來實現的,如果我們想隨時更改我們的排序,那麼就必須修改我們的DAO層代碼,確實不方便。但Freemarker爲我們提供了這樣的排序方法,解決了這個問題。
1. 
 
sort升序排序函數
sort對序列(sequence)進行排序,要求序列中的變量必須是:字符串(按首字母排序),數字,日期值。
<#list list?sort as l>…</#list>
2. 
 
sort_by函數
sort_by有一個參數,該參數用於指定想要排序的子變量,排序是按照變量對應的值進行排序,如:
<#list userList?sort_by(“age”) as user>…</#list>
age是User對象的屬性,排序是按age的值進行的。
3. 
 
reverse降序排序函數
 
 
  <#list list? reverse as l>…</#list>。reverse使用同sort相同。reverse還可以同sort_by一起使用
如:想讓用戶按年齡降序排序,那麼可以這個樣寫<#list userList?sort_by(“age”)?reverse as user>…</#list>
三、 
 
Freemarker如何遍歷List實例應用
創通過上面的介紹,相信您已經對Freemarker如何遍歷List有了瞭解,那麼我們就廢話少說,開始做一個應用吧。
User類
public class User{
 
 
  private String username;
 
 
  private
 
 
(省略set和get方法)
}
user.ftl

<#--Freemarker遍歷list-->
簡單遍歷list:
<#list userList as user>
 
 
用戶名:${user.userName}
 
 
密  碼:${user.userPassword}
 
 
年  齡: ${user.age}
</#list>


<#--Freemarker遍歷list並應用list隱含變量item_index-->
item_index使用:
<#list userList as user>
第${user_index+1}個用戶
 
 
用戶名:${user.userName}
 
 
密  碼:${user.userPassword}
 
 
年  齡: ${user.age}
</#list>
<#--Freemarker遍歷list並應用list隱含變量item_has_next-->
item_has_next,size使用:
<#list userList as user>

  用戶名:${user.userName}
 
 
密  碼:${user.userPassword}
 
 
年  齡: ${user.age}
 
 
<#if !user_has_next>
 
 
共有${userList?size}最後一個用戶是:${user.userName}
</#if>
</#list>
<#--Freemarker遍歷list並按用戶年齡升序排序-->

按用戶年齡升序排序:
<#list userList?sort_by("age") as user>

  用戶名:${user.userName}
 
 
密  碼:${user.userPassword}
 
 
年  齡: ${user.age}
 
 

</#list>
<#--Freemarker遍歷list並按用戶年齡降序排序-->

按用戶年齡降序排序:
<#list userList?sort_by("age")?reverse as user>

  用戶名:${user.userName}
 
 
密  碼:${user.userPassword}
 
 
年  齡: ${user.age}
 
 

</#list>
<#--Freemarker遍歷list當用戶年齡大於21歲時,停止輸出-->
list中應用break:
<#list userList?sort_by("age")?reverse as user>

  用戶名:${user.userName}
 
 
密  碼:${user.userPassword}
 
 
年  齡: ${user.age}
 
 
<#if (user.age>21) >
 
 
  <#break>
 
 
</#if>
</#list>

ClientTest類
public class ClientTest{
 
 
public static List<User> 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<User> list=new ArrayList<User>();
 
 
  list.add(user1);
 
 
  list.add(user2);
list.add(user3);
return list;
}
public static void main(String[] args){
 
 
List<User> list=ClientTest.initUserList();  
Map<String,Object> root=new HashMap<String,Object>();
root.put(“userList”,list);
 
 
FreeMarkertUtil.analysisTemplate(“user.ftl”,”UTF-8”,root);
//FreeMarkUtil類可以參考我上傳得源碼。
}
}
好了,到這裏程序就結束了,您可以運行ClientTest類來查看輸出結果了。

希望通過本文的介紹,可以讓您對FreeMarker如何遍歷List有一個清楚的瞭解。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章