FreeMarker 递归嵌套列表
FreeMarker recursive nested lists
我的数据结构如下所示:
public class Foo {
public Bar bar;
public List<Foo> foos = new ArrayList<>();
}
Foo 的每个实例都可以包含任意数量的 Foo
S,当然这反过来又可以包含更多的 Foo
S 等等。那么我将如何让 FreeMarker 遍历这样的列表?
你可以使用静态方法来freemarker。
向 Foo 添加静态方法 class printMe 或 doSomething
add public static printMe() { ...
}
此函数将自行打印并根据需要打印列表。
现在只需从 freemarker 模板调用它
${statics["packageName.Foo"].printMe()}
FreeMarker 宏(和函数)支持递归。所以像这样:
<#macro dumpFoo foo>
${foo.bar}
<#list foo.foos as childFoo>
<@dumpFoo childFoo />
</#list>
</#macro>
<@dumpFoo myFoo />
示例数据模型(使用 http://try.freemarker.org/ 语法,但它同样适用于 List
-s 和 Foo
bean):
myFoo = {
"bar": "root",
"foos": [
{
"bar": "child 1",
"foos": [
{
"bar": "child 1.1",
"foos": []
}
]
},
{
"bar": "child 2",
"foos": []
}
]
}
输出:
root
child 1
child 1.1
child 2
我的数据结构如下所示:
public class Foo {
public Bar bar;
public List<Foo> foos = new ArrayList<>();
}
Foo 的每个实例都可以包含任意数量的 Foo
S,当然这反过来又可以包含更多的 Foo
S 等等。那么我将如何让 FreeMarker 遍历这样的列表?
你可以使用静态方法来freemarker。
向 Foo 添加静态方法 class printMe 或 doSomething
add public static printMe() { ...
}
此函数将自行打印并根据需要打印列表。
现在只需从 freemarker 模板调用它
${statics["packageName.Foo"].printMe()}
FreeMarker 宏(和函数)支持递归。所以像这样:
<#macro dumpFoo foo>
${foo.bar}
<#list foo.foos as childFoo>
<@dumpFoo childFoo />
</#list>
</#macro>
<@dumpFoo myFoo />
示例数据模型(使用 http://try.freemarker.org/ 语法,但它同样适用于 List
-s 和 Foo
bean):
myFoo = {
"bar": "root",
"foos": [
{
"bar": "child 1",
"foos": [
{
"bar": "child 1.1",
"foos": []
}
]
},
{
"bar": "child 2",
"foos": []
}
]
}
输出:
root
child 1
child 1.1
child 2