我有一个如下所示的数据结构:
public class Foo {
public Bar bar;
public List<Foo> foos = new ArrayList<>();
}
Run Code Online (Sandbox Code Playgroud)
Foo 的每个实例都可以容纳任意数量的FooS,而这当然又可以包含更多的FooS,依此类推。那么我将如何让 FreeMarker 通过这样的列表呢?
FreeMarker 宏(和函数)支持递归。所以像这样:
<#macro dumpFoo foo>
${foo.bar}
<#list foo.foos as childFoo>
<@dumpFoo childFoo />
</#list>
</#macro>
<@dumpFoo myFoo />
Run Code Online (Sandbox Code Playgroud)
示例数据模型(使用http://try.freemarker.org/语法,但它同样适用于List-s 和Foobeans):
myFoo = {
"bar": "root",
"foos": [
{
"bar": "child 1",
"foos": [
{
"bar": "child 1.1",
"foos": []
}
]
},
{
"bar": "child 2",
"foos": []
}
]
}
Run Code Online (Sandbox Code Playgroud)
输出:
root
child 1
child 1.1
child 2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2425 次 |
| 最近记录: |