2013-08-27 9 views
6

Ho una lista in libera marcatore come di seguito:Ottenere lista sub da un elenco nel freemarker

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

Da questo elenco voglio solo la lista sub come v1 e v2.

Ho vagato per ottenere la sottoelenco in pennarello libero. Ma non è riuscito a trovare.

Qualsiasi aiuto sarebbe gradito.

+0

Potrebbe essere utile [link1] (http://bethecoder.com/applications/tutorials/template-engines/freemarker/split-the-string-and-get- sottostringhe-by-index.html), [link2] (http://freemarker.624813.n4.nabble.com/Splitting-a-list-and-adding-elements-td3341910.html) –

+0

Penso che questo snippet d idea per la vostra esigenza <#list varLista come x> $ {x} <# if x = "v2"><#break>

+0

Ma, io non voglio ottenere l'elenco sub in base al contenuto della lista. Piuttosto voglio basarmi su indici di lista. Hai qualche idea? – venky

risposta

1

È possibile utilizzare la variabile index quando si elenca la sequenza.

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

È possibile anche dividere la sequenza utilizzando chunk. Questo dividerà la sequenza in più sequenze della dimensione data.

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

Fonte: FreeMarker Manual

Tuttavia, è meglio per filtrare i dati prima di passarlo al modello.

7

Se si vuole veramente fare quella fetta sulla base di indici:

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

Ma attenzione, si fermerà con l'errore se l'indice è fuori portata. A seconda di cosa ti serve, potresti usare lo ?chunk(2).

Aggiornamento: Come evitare index-out-of-bounds errori, in FreeMarker 2.3.21 si può emettere listVar[0..*2], che tagliare fuori 2 elementi, o meno, se c'è meno disponibili. (Anche l'affettamento esclusivo può essere utile: listVar[0..<2])

+0

hai salvato la mia giornata. – Devz

Problemi correlati