当前位置: 首页 > 知识库问答 >
问题:

FreeMarker递归嵌套列表

农星华
2023-03-14

我的数据结构如下所示:

public class Foo {
    public Bar bar;
    public List<Foo> foos = new ArrayList<>();
}

Foo的每个实例都可以包含任意数量的FooS,这当然反过来又可以包含更多的FooS等等。那么,我该如何让FreeMarker通过这样的列表呢?

共有2个答案

虞正业
2023-03-14

可以使用静态方法释放标记。

将静态方法添加到Foo类printMe或do某物

add public static printMe() { ...
}

函数将自动打印,并根据需要打印列表。

现在只需从freemarker模板调用它

${statics["packageName.Foo"].printMe()} 

请参见访问静态方法

耿运浩
2023-03-14

FreeMarker宏(和函数)支持递归。比如说:

<#macro dumpFoo foo>
  ${foo.bar}
  <#list foo.foos as childFoo>
    <@dumpFoo childFoo />
  </#list>
</#macro>

<@dumpFoo myFoo />

示例数据模型(使用http://try.freemarker.org/语法,但它同样适用于List-s和Foobean):

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
 类似资料:
  • 我想迭代嵌套在映射中的列表,数据结构如下所示: Freemarker模板: 详细异常消息: FreeMarker模板错误:“...[...]”左操作数:需要序列或字符串或自动转换为字符串的东西(数字、日期或布尔值),但计算结果为extended_hash(包装器:f.t.simplehash):==>groups 那么,问题出在哪里呢? 附言。 我尝试了而不是,它会抛出一个新的异常堆栈:

  • 问题内容: 我是一名编程新手,在理解python教科书(Magnus Lie Hetland的“ Beginning Python”)中的示例时遇到了一些麻烦。该示例针对的是递归生成器,该生成器旨在展平嵌套列表的元素(具有任意深度): 然后,您将输入嵌套列表,如下所示: 我了解flatten()中的递归如何帮助缩小到此列表的最内层元素“ 1”,但是我不明白的是当“ 1”实际上作为“嵌套”传递回fl

  • 我试图创建一个正则表达式模式来匹配每个(内容*),但是该模式可以在另一个((内容)(内容))中找到。我尝试了,但这返回了外部的。 例如:字符串应返回: 第一个匹配: 第二个匹配: 编辑: 我试过:但在?R(未知标志)附近出现错误

  • 问题内容: 我有一个带有自我参照字段的模型,称为parent。模型: 序列化器: 现在,我要序列化区域的父级及其父级及其父级,直到父级为none。我发现了针对孩子而不是父母的递归序列化方法。我怎样才能做到这一点? 问题答案: 尝试在此处使用SerializerMethodField: 我不确定DRF是否有内置方法,但是您可以使用查询来获取所需的方法。

  • 我想我理解了教科书中对尾部递归函数的定义:在函数调用后不执行任何计算的函数。我还发现,作为一个结果,尾部递归函数的内存效率会更高,因为它每次调用只需要一条记录,而不是每次都需要保留一条记录(就像在普通递归中那样)。 我不太清楚的是,这个定义如何应用于嵌套调用。我将提供一个例子: 我最初给出的答案是,根据定义,它不是尾部递归的(因为外部调用是在计算内部调用之后执行的,所以其他计算是在第一次调用之后完

  • 我有一个对象列表,我想从它的字段中得到一个列表<假设我通过了列表