Freemarker list指令详解


java Freemarker中list指令主要是进行迭代服务器端传递过来的List集合。

定义

<#list nameList as names>    
  ${names}   
</#list>

name是list循环的时候取的一个循环变量.相关指令如下:

  • item_index:当前变量的索引值
  • item_has_next:是否存在下一个对象
  • break:跳出迭代
//遍历MAP
<#list map?keys as k>
     <option value="${k}">${map[k]}</option>
</#list>

方式

1. 获取或者设置list相关信息

<#list animals as ani>
    <!-- 获取list的size长度 -->
    <div>${list?size}<div>
    <!-- 获取list遍历中的下标序号 -->
    <div>${ani_index}<div>
    <!-- 遍历list的值 -->
    <div>${ani.name}${ani.price}<div>
    <!-- 是否是最后一个元素 -->
    <#if !ani_has_next>
        ${ani.name}
    </#if>
</#list>

2. list排序

//升序:sort_by()
<#list list?sort_by("字段") as x>
</#list>
//降序:sort_by()?reverse
<#list list?sort_by("字段")?reverse as x>
</#list>

3. list嵌套

<#list jsskList as jsskVO>
    <#list kcList as kcVO>
        <!-- kcVO里有编号和名称,而jsskVO里只有编号 -->
        <#if kcVO.kch=jsskVO.kch>
            ${kcVO.kcm}
        </#if>
    </#list>
</#list>

例子

//testList.java
@Test
public void testList() {
    List < Student > students = Arrays.asList(
        new Student("张三丰", "男", 26, new Date(1988 - 12 - 12), "湖北省武汉市武昌洪山区", 78451214),
        new Student("李雪", "女", 20, new Date(1991 - 12 - 18), "湖北省武汉市武昌", 85451214),
        new Student("刘刘", "男", 22, new Date(1989 - 10 - 18), "湖南省长沙市", 96551214),
        new Student("吴明", "女", 21, new Date(1990 - 12 - 18), "广东省深圳市", 56132012));
    root.put("students", students);
    ft.printFtl("stu.ftl", root);
}
//stu.ftl
<html>  
  <head>  
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">  
  </head>  
  <body>  
        <#list students as student>  
                  姓名:${student.studentName}  
            性别:${student.studentSex}  
            年龄:${student.studentAge}  
            生日:${(student.studentBirthday)?string("yyyy-MM-dd")}  
            地址:${student.studentAddr}  
            QQ:${student.studentQQ}<br/>  
        </#list>  
  </body>  
</html>

总结

  1. List指令还隐含了两个循环变量:item_index:当前迭代项在所有迭代项中的位置,是数字值。item_has_next:用于判断当前迭代项是否是所有迭代项中的最后一项。在使用上述两个循环变量时,一定要将item换成你自己定义的循环变量名

  2. Freemarker list循环过程中,如果您想跳出循环,那么可以使用结合break指令,即<#break>来完成。