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>