FreeMarker 递归嵌套列表

Tor*_*que 2 java freemarker

我有一个如下所示的数据结构:

public class Foo {
    public Bar bar;
    public List<Foo> foos = new ArrayList<>();
}
Run Code Online (Sandbox Code Playgroud)

Foo 的每个实例都可以容纳任意数量的FooS,而这当然又可以包含更多的FooS,依此类推。那么我将如何让 FreeMarker 通过这样的列表呢?

dde*_*any 5

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)