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

在freemarker中使用递归宏时StackOverflow错误

戚鸿福
2023-03-14

我需要在Freemarker中使用实体列表迭代器迭代大量记录。但是,在使用递归宏时,当它仅达到1000条记录时,就会出现StackOverflow错误。下面是同样的代码片段。

<#macro recurseTest value>
  ${value.partyId!}
  ${value.firstName!}
  ${value.lastName!}
  <#local tmp = eli.next()!/>
  <#if tmp?has_content>
     <@recurseTest tmp/>
  </#if>
</#macro>
<#assign eli = EntityQuery.use(delegator).from("Person").queryIterator()/>
<br>
<@recurseTest eli.next()!/>
${eli.close()}

共有1个答案

阙弘博
2023-03-14

不管FreeMarker是什么,使用递归处理1000个元素都不是一种正常的做法(除了在一些没有常用循环构造但具有尾部递归优化的函数式语言中)。尝试使用#list。如果您无法从该查询API中获得列表迭代器(但如果可以,请查看它),作为最后的手段,您可以执行此hack(穷人的do{…}while(cond)):

<#list 1..100000000 as _>
  ...
  <#if !tmp?has_content><#break></#if>
</#list>

(使用足够高的不兼容\u改进FreeMarker配置设置,您可以编写

 类似资料:
  • 我想递归遍历LinkedHashMap的键和值,并使用ApacheFreeMarker将它们打印到模板中。LinkedHashMap包含作为字符串的键和作为对象的值。这些值可以是LinkedHashMap、ArrayList或字符串。 下面的java源代码返回我想使用freemarker创建的字符串。 输出为: freemarker模板包含以下部分。 使用此模板时,将显示以下错误: 错误显示“ob

  • 您好,我正在从事一个spring mvc项目,我想使用FreeMarker作为我的模板引擎,我在使用宏时遇到了问题,我想创建一个母版页或布局(页脚、页眉和菜单),我可以在其他页面中使用,到目前为止,我正在做一个简单的示例,说明如何操作,但我无法让它工作,我在宏中输入的内容没有显示我的FreeMarker版本是2.3.21。 以下是我的freemarker java类配置: 我正在将宏保存为。类似于

  • 我在使用HTTPUrlConnection时遇到了一些问题。代码基本上是在循环中运行的,每次都连接到不同的URL,检查响应,如果响应满足某些条件,则退出。我被StackOverflowerr搞砸了,但我不确定自己搞砸了什么。我没有使用

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

  • 当我运行这些时,我将得到以下错误 使用FreeMarker模板转换输入消息时出错:对于“${...}”内容:需要一个字符串或自动转换为字符串(数字、日期或布尔值)或“模板输出”的东西,但它的计算结果是一个序列+哈希(包装器:f.e.dom.nodelistmodel):==>inp.leaf[在模板“support.ftl”中第2行,第3列] 如果我将字符串传递给支持的FTL而不是XML,模板就可