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

Posted

技术标签:

【中文标题】如何在 Freemarker 列表之间获取逗号【英文标题】:How to get comma between Freemarker list 【发布时间】:2014-06-13 06:50:11 【问题描述】:

我在 freemarker 中迭代一个 java 列表,但我想在单词之间使用逗号。 这是我的代码

<#list key_list[key] as value >$value?js_string, </#list>

这给了我输出

a,b,c,d,

我想要这种格式的输出:(最后没有逗号)

a,b,c,d

我怎样才能得到它

【问题讨论】:

【参考方案1】:

如果您使用 FreeMarker 2.3.23 或更高版本,sep 标签将适合您:

<#list users as user>
    $user<#sep>, </#sep>
</#list>

或者甚至比这更短:

<#list users as user>$user<#sep>, </#list>

【讨论】:

【参考方案2】:

这将给出准确的结果

其实你需要创建一个变量,然后在里面追加数据。例如&lt;#assign result =""/&gt;

<#assign result =""/>
<#assign seq = ["a", "b", "c", "d"]> // test data for checking output format
<#list seq as x>  
 <#assign result = result+"$x"/> 
 <#if x_has_next>
  <#assign result = result+","/>
 </#if>
</#list>  
$result

结果

a,b,c,d

【讨论】:

自 FTL 2.3.23 以来,x_has_next 已更改为 x?has_next。此外,这也适用于哈希(例如 hashKey?has_next)。【参考方案3】:

您必须包含&lt;#if value_has_next&gt;,&lt;/#if&gt; 声明。

这可能会有所帮助:

<#assign seq = ["winter", "spring", "summer", "autumn"]>
<#list seq as x>
  $x_index + 1. $x<#if x_has_next>,</#if>
</#list>  

将输出:

    冬天, 春天, 夏天, 秋天

在以下位置查看此示例和更多示例:

http://freemarker.org/docs/ref_directive_list.html

【讨论】:

如果您的 freemarker 版本是 2.3.23 或更高版本,sep 标签将为您工作: $user, #sep> # list> 甚至更短:$user, #list> #sep不够灵活的地方,推荐的形式是x?has_next而不是x_has_next(2.3.23起),还有?is_first?index等循环变量内置函数 (freemarker.apache.org/docs/ref_builtins_loop_var.html)。

以上是关于如何在 Freemarker 列表之间获取逗号的主要内容,如果未能解决你的问题,请参考以下文章

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

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

如何将字符串列表连接在一起,每个值之间用逗号分隔?

在 Freemarker 模板中,如何获取数据模型类的名称?

如何在两个逗号之间获取字符串

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