FreeMarker运输清单

时间:2012-07-24 10:41:26

标签: list indexing freemarker

在我的一个FreeMarker模板中,我有一对看起来像这样的宏

<#macro RepeatTwice><#nested 1><#nested 2></#macro>

<#macro Destinations>
<#assign DestinationList = []>
<@RepeatTwice ; Index>
<#assign City == some XPath expression dependant on the index>
<#if City == something>
<#assign DestinationList = DestinationList + ["some string"]>
<#elseif City == something else>
<#assign DestinationList = DestinationList + ["some string"]>
</#if>
</@>
</#macro>

现在,我的目的地列表包含2个值。如果我在${DestinationList[0]}之前插入${DestinationList[1]}</#macro>,我会得到预期的输出。

我的问题是---在一个单独的模板中,我想从这个宏中捕获整个列表,以便我可以在需要时访问它的元素。

为此我需要宏来返回整个列表,而不仅仅是它的一个元素。

但是插入${DestinationList}或只是DestinationList会返回错误。

我尝试过像${DestinationList[0,1]}这样的事情,但似乎没有任何效果。

这可能吗?

谢谢,

罗勒

1 个答案:

答案 0 :(得分:0)

宏(和指令)将打印到输出(并具有其他任何副作用),而不是计算值。你需要在这里定义一个函数。您使用#function代替#macro,然后您可以使用#return返回任何值(如列表)。

另请注意,${expression}始终将值转换为字符串,这就是您收到错误的原因。