• Freemarker中如何遍歷List

    2
    C/C++ list 12858 次瀏覽

    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有一個清楚的了解。

    相似問題

    相關經驗

    相關資訊

    相關文檔

  • sesese色