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>