FreeMarker如何实现多组逗号分隔数据按索引配对逐行输出
FreeMarker 实现两类逗号分隔列表按索引配对排版
实现思路
直接在FreeMarker模板层完成字符串拆分、空格清理、按索引配对、排版控制即可,不需要提前在业务代码层预处理数据。核心逻辑是把两个逗号分隔的字符串拆成序列后,按下标对齐取值,同时控制组间空行不要在末尾输出多余空白。
可直接使用的模板代码
<#-- 拆分输入字符串为列表,同时清理每个元素前后的多余空格 --> <#assign nameList = ListingName?split(",")?map(item => item?trim)> <#assign addressList = ListingAddress?split(",")?map(item => item?trim)> <#-- 取两个列表的最小长度作为循环次数,兼容长度不一致的场景避免索引越界 --> <#assign loopSize = nameList?size min addressList?size> <#list 0..<loopSize as idx> ${nameList[idx]} ${addressList[idx]} <#-- 非最后一组时输出空行做分隔 --> <#if idx?has_next> </#if> </#list>
兼容旧版本FreeMarker的写法
如果使用的FreeMarker版本低于2.3.29,不支持?map高阶函数,可以把清理空格的逻辑放到取值时处理,代码如下:
<#assign nameList = ListingName?split(",")> <#assign addressList = ListingAddress?split(",")> <#assign loopSize = nameList?size min addressList?size> <#list 0..<loopSize as idx> ${nameList[idx]?trim} ${addressList[idx]?trim} <#if idx?has_next> </#if> </#list>
若所用FreeMarker版本不支持
..<右开区间语法,将循环范围替换为0..loopSize-1即可,渲染效果无差异。
效果验证
传入题目给出的示例输入:
ListingName = "abhay, hkm, Himanshu"ListingAddress = "Delhi, Noida, Agra"
模板渲染后输出结果完全匹配要求:
abhay Delhi hkm Noida Himanshu Agra
内容的提问来源于stack exchange,提问作者Himanshu Kumar Maurya
相关产品推荐
相关产品推荐

