我有一个如下所示的数据结构:
public class Foo {
public Bar bar;
public List<Foo> foos = new ArrayList<>();
}
Foo的每个实例都可以保存任意数量的Foo
S,当然这又可以包含更多Foo
S等等。那么我将如何让FreeMarker通过这样的列表呢?
答案 0 :(得分:3)
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
答案 1 :(得分:0)
您可以使用静态方法进行自由标记。
将静态方法添加到Foo类printMe或doSomething
add public static printMe() { ...
}
此功能将自行打印并根据需要打印列表。
现在只需从freemarker模板中调用它
${statics["packageName.Foo"].printMe()}