在SimpleSequence中添加值 - FreeMarker

Vic*_*cky 23 freemarker

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

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

<#assign x = ["red", 16, "blue", "cyan"]>
Run Code Online (Sandbox Code Playgroud)

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

Lau*_*eyn 44

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

<#assign x = x + [ "green" ] />
Run Code Online (Sandbox Code Playgroud)

  • @Vicky`SequenceModel`类有`add`方法,但语法中没有任何东西可以调用它们.所以我的解决方案是唯一的方法(当然不是编写Java代码并将其添加到模型中). (2认同)

Jun*_*awa 14

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

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

<#assign my_array = [] />
<#list 1..10 as i>
  <#assign my_array = my_array + ["value " + i] />
</#list>
Run Code Online (Sandbox Code Playgroud)

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

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

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


Rya*_*yne 5

洛朗的回答是正确的并且完全可以接受。但您也可以使用简写添加值:

<#assign x += ["green"]>
Run Code Online (Sandbox Code Playgroud)

现在序列将如下所示:

Sequence (5)
  0 = "red" (String)
  1 = 16 (BigDecimal)
  2 = "blue" (String)
  3 = "cyan" (String)
  4 = "green" (String)
Run Code Online (Sandbox Code Playgroud)