记一个freemarker循环的例子:
<#if mouldDataList??>
<#list mouldDataList as vo>
<#assign fieldMap = vo.extendedFieldMap>
<#if fieldMap?exists>
<#list fieldMap?keys as key>
<#if (fieldMap.get(key))??>
<#assign fieldValue = fieldMap.get(key)>
<#if fieldValue?? && fieldValue!=''>
${fieldValue!''}
#if>
#if>
#list>
#if>
#list>
#if>
讲一下list循环:
以下例子中 student对象有name age 两个属性。studList包含3个student对象,其值为:
[
{
"name": "bob",
"age": 15
},
{
"name": "jack",
"age": 13
},
{
"name": "mark",
"age": 18
}
]
a.获取list中元素的下标:
<#list studList as student>
${student_index}. ${student.name}
#list>
输出结果为:
0. bob
1. jack
2. mark
b.判断是否是最后一个元素:
<#list studList as student>
${student.name}
<#if !student_has_next>
最后一个学生为:${student.name},共有${studList?size}个学生
#if>
#list>
输出结果为:
bob
jack
mark
最后一个学生为:mark,共有3个学生
c.循环到某一值时退出:
<#list studList as student>
<#if student.age gt 16>
<#break>
#if>
${student.name}
#list>
输出结果为:
bob
jack
d.sort升序排序和reverse逆序排序以及sort_by()升序排序:
sort对list进行排序,要求list中的变量需为以下几种类型:数字、字符串(按首字母排序)、日期
sort升序排序:
<#list [2,6,3,7]?sort as number>
${number}
#list>
输出结果为:
2
3
6
7
reverse逆序排序(注意是逆序,不是降序):
<#list [2,6,3,7]?reverse as number>
${number}
#list>
输出结果为:
3
6
2
reverse还可以用于对对象数组的逆序排序,这点和sort不同。因为reverse只是将数组倒过来,并不需要排序因子。
降序排序:
<#list [2,6,3,7]?sort?reverse as number>
${number}
#list>
输出结果为:
7
6
3
2
sort_by()排序:
sort_by()排序函数用于对对象进行排序,此函数需要传入一个参数,该参数为对象的一个属性,sort_by将会把属性对应的值作为排序的依据。
<#list studList?sort_by("age") as student>
名字:${student.name},年龄:${student.age}
#list>
上面代码中,参数为“age”,它是student对象的属性,排序将按照student对象中“age”的值进行。
输出结果为:
名字:jack,年龄:13
名字:bob,年龄:15
名字:mark,年龄:18
如果想按age的值进行降序,可加上reverse进行转换:studList?sort_by("age")?reverse