2013-08-27 42 views
6

子列表我有如下無選擇標記列表:從列表中獲取的freemarker

<#assign listVar = ["v1", "v2", "v3", "v4" ] /> 

從上面的列表我只想子列表作爲V1和V2。

我一直在徘徊獲取自由標記中的子列表。但無法找到。

任何幫助將不勝感激。

+0

可能會有所幫助[link1](http://bethecoder.com/applications/tutorials/template-engines/freemarker/split-the-string-and-get- substrings-by-index.html),[link2](http://freemarker.624813.n4.nabble.com/Splitting-a-list-and-adding-elements-td3341910.html) –

+0

我覺得這段代碼給了想法爲您的要求<#list listVar當x> $ {X} <#如果X = 「V2」><#break>

+0

但是,我不想基於列表的內容來獲得子列表。相反,我希望基於列表的索引。有什麼想法嗎? – venky

回答

1

當您列出序列時,您可以使用index變量。

<#assign listVar = ["v1", "v2", "v3", "v4" ] /> 
<#list listVar as aVar> 
    <#if aVar_index > 2><#break/></#if> 
</#list> 

您也可以使用chunk對序列進行分區。這將以給定大小的多個序列分割序列。

<#assign partitions = listVar?chunk(2) /> 
<#assign firstPartition = partitions?first /> 

來源:FreeMarker Manual

然而,最好是將它傳遞給模板之前對數據進行篩選。

7

如果你真的想基於指數該片:

<#assign listVar = ["v1", "v2", "v3", "v4" ] /> 
<#assign sublistVar = listVar[0..1] /> 

但要注意,它會與錯誤停止,如果該指數超出範圍。取決於你需要什麼,你可能想用?chunk(2)來代替。

更新:作爲避免索引出界外的錯誤,在FreeMarker的2.3.21可以發出listVar[0..*2],這將切出2項或更少,如果有較少可用。 (另外獨家結束切片可以得心應手:listVar[0..<2]

+0

你救了我的一天。 – Devz