2013-08-27 33 views
6

mam listę w wolnym markerem jak poniżej:Get sub listy z listy w freemarker

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

z powyższej listy Chcę tylko listę sub jako V1 i V2.

Błąkałem się, aby uzyskać listę sub w wolnym znaczniku. Ale nie udało się znaleźć.

Każda pomoc będzie doceniona.

+0

Może być pomocne [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

Myślę, że ten fragment daje pomysł na zapotrzebowania <#list listVar jako x> $ {x} <#if x = "v2"><#break>

+0

Ale nie chcę dostać sub listy oparte na zawartości listy. Raczej chcę na podstawie indeksów listy. Masz jakiś pomysł? – venky

Odpowiedz

1

Możesz użyć zmiennej index, gdy wyświetlisz listę sekwencji.

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

Można również podzielić sekwencję za pomocą chunk. Spowoduje to podzielenie sekwencji na wiele sekwencji o danym rozmiarze.

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

Źródło: FreeMarker Manual

Jednak lepiej jest filtrowanie danych przed przekazaniem go do szablonu.

7

Jeśli naprawdę chcesz, aby ten kawałek oparty na indeksach:

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

Ale uwaga, zatrzyma się z powodu błędu, jeśli indeks znajduje się poza zasięgiem. W zależności od tego, czego potrzebujesz, możesz zamiast tego użyć ?chunk(2).

Aktualizacja: W uniknięcia indeksu-out-of-granice błędu w FreeMarker 2.3.21 można wydać listVar[0..*2], który będzie pokroić na 2 pozycji, albo mniej jeśli jest mniej dostępna. (Również przydatne może być specjalne krojenie: listVar[0..<2])

+0

zaoszczędzisz mój dzień. – Devz

Powiązane problemy