如何在freeMarker中迭代集合两次?

时间:2017-09-11 11:14:54

标签: java list collections freemarker

我是这种编程语言的新手,我有一个名为 model 的集合,我需要在2个不同的宏中完成它。

我尝试将此集合复制到两个不同的全局变量中:

<#global model1=model.issues>
<#global model2=model.issues>

然后,在我的第一个宏中,我做了:

<#macro renderInformationIssues>

    <@renderTableFrame title=INFO_MESSAGES_HEADER colNames=INFO_MESSAGE_COLUMN_NAMES colGroups=["g-col-index", "g-col-message"]>

        <#list model1 as issue_info>
                ///////I PRINT SOMETHING FROM MODEL HERE/////////////
        </#list>
    </@renderTableFrame>

</#macro>

在我的第二个宏中,我做了:

<#macro renderExecutionIssues>
    hi1
   <@renderTableFrame title=EXECUTION_MESSAGES_HEADER colNames=EXECUTION_MESSAGE_COLUMN_NAMES colGroups=["g-col-index", "g-col-originator", "g-col-message"]>
    hi2
        <#list model2 as issue>
    hi3
          ///////I WANT TO PRINT SOMETHING ELSE FROM MODEL HERE/////////////
        </#list>
   </@renderTableFrame>

 </#macro>

我调用的第一个宏,它显示内容,但我调用的第二个宏(在本例中, renderExecutionIssue ,没有显示任何内容。实际上,我在第二个宏中看到的是只有 hi1 hi2

有可能解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

那些#global - s不复制集合; model1model2只会指向同一个对象。但是,java.util.Collection - s可以列出两次,因此也没有必要复制它们。我怀疑你有java.util.Iterator(或Enumeration),因为那些不能列出两次。此外,无法判断Iterator是否返回0个元素,因为它已经在前面列出,或者因为它总是为空。所以在第二种情况下,不知道发生了什么,FreeMarker只列出了0个元素。如果您希望多次列出某些内容,请将Collection(如List)传递给FreeMarker,而不是Iterator