在freemarker的,我期待包括在另一個重複現有的模板。現有模板假定它正在查看值堆棧的頂部。我真的在尋找一個'應用'功能。所以我有一個父模板:我如何在freemarker的推變量的值堆棧
<#list items as item>
<#include "/my/subtemplate.ftl"/>
</#list>
我怎樣才能讓子模板見項目作爲值堆棧頂部的項目,所以我並不需要在每個參考上覆制和更改爲「財產」該項目item.myproperty?
在freemarker的,我期待包括在另一個重複現有的模板。現有模板假定它正在查看值堆棧的頂部。我真的在尋找一個'應用'功能。所以我有一個父模板:我如何在freemarker的推變量的值堆棧
<#list items as item>
<#include "/my/subtemplate.ftl"/>
</#list>
我怎樣才能讓子模板見項目作爲值堆棧頂部的項目,所以我並不需要在每個參考上覆制和更改爲「財產」該項目item.myproperty?
只是確認「棧」是由Struts2框架放入模板的上下文中的值棧對象的引用。它不在Struts2之外。
在FreeMarker的,所包括的模板股包括模板,如數據模型和模板語言變量的狀態。不幸的是,沒有像這樣的上下文的推動或彈出來改變包含的模板的上下文。您可以使用<#assign>
或<#global>
將變量放在模板範圍內,但這些不會替換共享的模板數據模型。
在普通的FreeMarker中,我認爲你會將子模板重構爲宏或函數,並將它作爲參數傳入。
谷歌搜索和一些讀碼後,接下來的工作對我來說:
<#list items as item>
<#assign dummy=stack.push(item)/>
<#include "/my/subtemplate.ftl"/>
<#assign dummy=stack.pop()/>
</#list>
我得到「表達棧未定義線......」你應該修改辦法讓訪問堆棧變量的模板? – 2010-08-31 10:16:37
嗯,這在Struts2中(爲了實現自定義標籤)而工作。這可能是Struts2做了一些事情來使堆棧可用。 – 2010-09-01 21:11:31