FreeMarker中如何将逗号分隔字符串转为数组供list指令遍历
FreeMarker 逗号分隔字符串遍历处理方案
当模板中获取到的变量a为逗号分隔的字符串(如abhay, himanshu, aman, piyush),而非标准数组/序列类型时,直接使用<#list>遍历无法得到预期结果,可通过以下方式处理:
模板端直接使用内置函数处理(最简便,无需修改后端代码)
利用FreeMarker自带的split内置方法按逗号拆分字符串,由于示例字符串逗号后存在空格,搭配trim方法去除元素首尾多余空白即可正常遍历:<#list a?split(",") as x> ${x?trim} </#list>如果存在空值、多余空白需要统一处理,可以先将清洗后的序列赋值给临时变量,后续复用更方便:
<#-- 拆分+去空格+过滤空内容 --> <#assign aList = a?split(",")?map(item -> item?trim)?filter(item -> item?has_content)> <#list aList as x> ${x} </#list>后端预处理后传参(适合多模板复用场景)
在Java层将逗号分隔的字符串提前转换为List类型,清洗完成后再传入模板,模板中可直接用原有遍历逻辑,无需额外处理:// Java端处理示例 String rawA = "abhay, himanshu, aman, piyush"; List<String> a = Arrays.stream(rawA.split(",")) .map(String::trim) .filter(s -> !s.isBlank()) .toList(); // 将处理完成的a作为参数传入FreeMarker模板即可
注意:如果字符串中的逗号存在转义场景(比如元素本身包含逗号),不要直接用简单的
split处理,需要根据实际的转义规则自定义拆分逻辑,避免元素拆分错误。
内容的提问来源于stack exchange,提问作者Himanshu Kumar Maurya
相关产品推荐
相关产品推荐

