在freemarker中,我希望重复包含其他模板。现有模板假设它正在查看值堆栈的顶部。我真的在寻找'应用'功能。所以我有一个父模板:
<#list items as item>
<#include "/my/subtemplate.ftl"/>
</#list>
如何让subtemplate看到item作为值堆栈的顶部项目,这样我就不需要复制它并将项目上对'property'的每个引用更改为item.myproperty?
答案 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>