2010-08-19 39 views
1

在freemarker的,我期待包括在另一個重複現有的模板。現有模板假定它正在查看值堆棧的頂部。我真的在尋找一個'應用'功能。所以我有一個父模板:我如何在freemarker的推變量的值堆棧

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

我怎樣才能讓子模板見項目作爲值堆棧頂部的項目,所以我並不需要在每個參考上覆制和更改爲「財產」該項目item.myproperty?

回答

2

只是確認「棧」是由Struts2框架放入模板的上下文中的值棧對象的引用。它不在Struts2之外。

在FreeMarker的,所包括的模板股包括模板,如數據模型和模板語言變量的狀態。不幸的是,沒有像這樣的上下文的推動或彈出來改變包含的模板的上下文。您可以使用<#assign><#global>將變量放在模板範圍內,但這些不會替換共享的模板數據模型。

在普通的FreeMarker中,我認爲你會將子模板重構爲宏或函數,並將它作爲參數傳入。

1

谷歌搜索和一些讀碼後,接下來的工作對我來說:

<#list items as item> 
<#assign dummy=stack.push(item)/> 
<#include "/my/subtemplate.ftl"/> 
<#assign dummy=stack.pop()/> 
</#list> 
+0

我得到「表達棧未定義線......」你應該修改辦法讓訪問堆棧變量的模板? – 2010-08-31 10:16:37

+0

嗯,這在Struts2中(爲了實現自定義標籤)而工作。這可能是Struts2做了一些事情來使堆棧可用。 – 2010-09-01 21:11:31