web-dev-qa-db-fra.com

Ajouter des valeurs à une séquence?

J'ai créé un FreeMarker séquence dans mon modèle:

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

Comment ajouter des valeurs supplémentaires à la séquence?

24
Vicky

Vous devez créer une nouvelle séquence en concaténant x et une séquence contenant uniquement le nouvel élément:

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

FreeMarker est essentiellement un langage à écriture unique. Il essaie très fort de rendre impossible la manipulation des données, et cela inclut la modification de tableaux ou de cartes, etc.

Vous pouvez toutefois contourner ce problème par la concaténation et la réaffectation:

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

Cela devrait aboutir à un tableau contenant "valeur 1" à "valeur 10". Si cela semble inélégant, c'est parce que c'était prévu de cette façon. Du point de vue idéologique de FreeMarker, une fois que vous avez commencé à construire des tableaux, etc., vous êtes allé au-delà de ce que le langage de création de modèles devrait faire et dans ce que les modèles, contrôleurs, classes d'assistance, etc. devraient faire dans Java code. Travailler dans FreeMarker peut devenir extrêmement frustrant à mesure que vous vous écartez de ce point de vue.

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

Le langage de modèle FreeMarkes ne prend pas en charge la modification des séquences/hachages. C'est pour afficher des choses déjà calculées, pas pour calculer des données. Gardez les modèles simples. Mais n'abandonnez pas, vous verrez quelques conseils et astuces ci-dessous.

14

réponse de Laurent est correct et parfaitement acceptable. Mais vous pouvez également ajouter une valeur en utilisant un raccourci:

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

Maintenant, la séquence ressemblera à:

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