从freemarker的列表中获取子列表

Posted

技术标签:

【中文标题】从freemarker的列表中获取子列表【英文标题】:Get sub list from a list in freemarker 【发布时间】:2013-08-29 18:52:15 【问题描述】:

我有一个免费标记列表如下:

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

从上面的列表中,我只希望子列表为 v1 和 v2。

我一直在寻找免费标记中的子列表。但是没能找到。

任何帮助将不胜感激。

【问题讨论】:

可能会有所帮助link1,link2 我认为这个 sn-p 为您的要求提供了一个想法 $x #if> 但是,我不想根据列表的内容获取子列表。相反,我想要基于列表的索引。有什么想法吗? 【参考方案1】:

如果您真的想根据索引制作该切片:

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

见Freemarker Sequence slicing。

但请注意,如果索引超出范围,它将因错误而停止。根据您的需要,您可能需要改用?chunk(2)

更新:为了避免 index-out-of-bounds 错误,在 FreeMarker 2.3.21 中,您可以发出 listVar[0..*2],这将切出 2 个项目,如果可用的项目更少,则更少。 (还有独享端切片可以派上用场:listVar[0..&lt;2]

【讨论】:

你拯救了我的一天。 嗨丹尼尔!您能否在built-ins 和sequence directives 中提及这一点?使用关键字subsequencesublist。并带有指向this 的链接。谢谢!【参考方案2】:

您可以在列出序列时使用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

但是,最好在将数据传递给模板之前对其进行过滤。

【讨论】:

以上是关于从freemarker的列表中获取子列表的主要内容,如果未能解决你的问题,请参考以下文章

如何从 FreeMarker 模板调用对象的 java 方法?

如何在freemarker模板中按索引获取列表项?

如何使用 freemarker 制作下拉列表?

如何在 Freemarker 列表之间获取逗号

SpringMvc 整合Freemarker后,ftl页面怎么获取httpSession

FreeMarker 当前日期比较