在SimpleSequence中添加值 - FreeMarker

时间:2011-04-01 11:55:13

标签: freemarker

我们如何在Freemarker中已经创建的SequenceModel实例中添加值?

例如:我有以下创建List(SequenceModel)的方法:

<#assign x = ["red", 16, "blue", "cyan"]>

现在有办法,我可以在上面的列表中添加另一种颜色吗?

3 个答案:

答案 0 :(得分:42)

您必须通过连接x和仅包含新元素的序列来创建新序列:

<#assign x = x + [ "green" ] />

答案 1 :(得分:14)

FreeMarker基本上是一次写入语言。它非常努力地使得无法操纵数据,包括修改数组或地图等等。

但是,您可以通过连接和重新分配来解决此问题:

<#assign my_array = [] />
<#list 1..10 as i>
  <#assign my_array = my_array + ["value " + i] />
</#list>

这将导致包含“值1”到“值10”的数组。如果这看起来不那么优雅,那是因为它的意图是这样的。从FreeMarker的意识形态来看,一旦你开始构建数组等,你就已经超越了模板语言应该做的事情,以及模型,控制器,辅助类等应该在Java代码中做的事情。你越偏离这种观点,在FreeMarker工作就会变得非常沮丧。

来自http://freemarker.sourceforge.net/docs/app_faq.html#faq_modify_seq_and_map

  

FreeMarkes模板语言不支持序列/哈希的修改。它用于显示已经计算的东西,而不是用于计算数据。保持模板简单。但是不要放弃,你会看到一些建议和伎俩。

答案 2 :(得分:0)

Laurent's answer是正确的,完全可以接受。但是您也可以使用速记来添加值:

<#assign x += ["green"]>

现在序列将如下所示:

Sequence (5)
  0 = "red" (String)
  1 = 16 (BigDecimal)
  2 = "blue" (String)
  3 = "cyan" (String)
  4 = "green" (String)