FreeMarker循環

FreeMarker是一個用Java語言編寫的模板引擎,它基於模板來生成文本輸出。FreeMarker與Web容器無關,即在Web運行時,它並不知道Servlet或HTTP。它不僅可以用作表現層的實現技術,而且還可以用於生成XML,JSP或Java 等。

簡介

FreeMarker允許Java servlet保持圖形設計同應用程序邏輯的分離,這是通過在模板中密封HTML完成的。模板用servlet提供的數據動態地生成 HTML。模板語言是強大的直觀的,編譯器速度快,輸出接近靜態HTML頁面的速度。雖然FreeMarker具有一些編程的能力,但通常由Java程序準備要顯示的數據,由FreeMarker生成頁面,通過模板顯示準備的數據。

FreeMarker與容器無關,因爲它並不知道HTTP或Servlet;FreeMarker同樣可以應用於非Web應用程序環境,FreeMarker更適合作爲Model2框架(如Struts)的視圖組件,可以在模板中使用JSP標記庫,FreeMarker是免費的。

  • 循環list
<#list userList as user>
    <#if userList_index ==0><!--第一個用戶-->
    </#if>
</#list>


<#--Freemarker遍歷listt-->
<#list userList as user>
  用戶名:${user.userName}
  密  碼:${user.userPassword}
  年  齡: ${user.age}
<#if !user_has_next> <#--應用list隱含變量item_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>

freemarker不支持表達式的嵌套。
使用assign指令定義並設置

  • 複雜的list集合裏面map,map裏面套有list2集合,list2裏面還有map
<#list productTypeCateList as middleMap>
    <#list middleMap?keys as itemKey>
        <tr>
            <#if itemKey=="name">                    
                <td>${(middleMap[itemKey])!}</td>                  
            </#if>                  
            <#if itemKey=="categoryList">                  
                <#list middleMap[itemKey] as cateMap>                  
                    <#list cateMap?keys as cateKey>                  
                        <#if itemKey=="name">                  
                            <td>${(cateMap[cateKey])!}</td>                  
                        </#if>                  
                    </#list>                  
                </#list>                                      
            </#if>                
        </tr>              
    </#list>            
</#list>
  • 複雜list:list裏有子list,子list裏map
<#if userList? exists> <!--判斷userList是否存在-->
     <#list userList as list1>    <!--循環list取別名 list1-->
        <#list list1 as childList>   <!--循環子list 取別名childList-->
            <#if childList_index == 0> <!--判斷是否第一條記錄-->
                ${childList.no}
            <#else>
                ${childList.name}
            </#if>
        </#list>
     </#list>    
</#if>
  • freemarker獲取list的size
ArrayList<String> list = new ArrayList<String>();
${list?size}
  • list的遍歷
<#list animals as being>
 <tr>
  <td>${being.name}${being.price}<td>
 </tr>
</#list>
  • 遍歷MAP
<#list map?keys as k>
 <option value="${k}">${map[k]}</option>
</#list>
  • list遍歷中的下標序號
<!-- _index是list的一個屬性-->
<#list list as a>
 ${a_index}
</#list>
  • 取list中第i個元素的值
${list[i]}
<!-- 嵌套時前面要有括號,如下,將字符串變成list,然後取第i個元素的值-->
${(str?split(","))[i]}
  • list的嵌套
<#list jsskList as jsskVO>
 <#list kcList as kcVO>
  <#if kcVO.kch=jsskVO.kch> <!--kcVO裏有編號和名稱,而jsskVO裏只有編號-->
   ${kcVO.kcm}
  </#if>
 </#list>
</#list>
  • list排序
<!--升序 .sort_by()-->
<#list list?sort_by("字段") as x>
</#list>
<!--降序 .sort_by()?reverse-->
<#list list?sort_by("字段")?reverse as x>
</#list>
  • item_has_next,size使用
<#list userList as user>
 <#if !user_has_next>
  <!--共有${userList?size}最後一個用戶是:${user.userName}-->
 </#if>
</#list>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章