如何在freemarker中的值堆栈上推送变量

时间:2010-08-19 15:01:39

标签: freemarker

在freemarker中,我希望重复包含其他模板。现有模板假设它正在查看值堆栈的顶部。我真的在寻找'应用'功能。所以我有一个父模板:

<#list items as item>
<#include "/my/subtemplate.ftl"/>
</#list>

如何让subtemplate看到item作为值堆栈的顶部项目,这样我就不需要复制它并将项目上对'property'的每个引用更改为item.myproperty?

2 个答案:

答案 0 :(得分:2)

只是确认“stack”是对Struts2框架放置在模板上下文中的ValueStack对象的引用。它在Struts2之外不存在。

在FreeMarker中,包含的模板共享包含模板的状态,例如数据模型和模板语言变量。不幸的是,没有像这样的上下文推送或弹出来更改包含的模板的上下文。您可以使用<#assign><#global>将变量放在模板范围内,但这些变量不会替换共享模板数据模型。

在普通的FreeMarker中,我认为你会将子模板重构为宏或函数,并<#import>将它作为参数传递。

答案 1 :(得分:1)

在使用Google搜索和一些代码阅读后,以下内容对我有用:

<#list items as item>
<#assign dummy=stack.push(item)/>
<#include "/my/subtemplate.ftl"/>
<#assign dummy=stack.pop()/>
</#list>
相关问题