Я создал последовательность FreeMarker в своем шаблоне:
<#assign x = ["red", 16, "blue", "cyan"]>
Как добавить дополнительные значения в последовательность?
Я создал последовательность FreeMarker в своем шаблоне:
<#assign x = ["red", 16, "blue", "cyan"]>
Как добавить дополнительные значения в последовательность?
Вы должны создать новую последовательность, объединив x
и последовательность, содержащую только новый элемент:
<#assign x = x + [ "green" ] />
SequenceModel
имеет методы add
, но в синтаксисе ничего не существует для их вызова. Таким образом, мое решение - единственный способ сделать это (конечно, за исключением написания кода Java и добавления его в модель).
- person Laurent Pireyn; 01.04.2011
SimpleSequence
— это всего лишь одна из реализаций последовательности, а SimpleSequence.add
предназначен только для инициализации последовательности в Java.
- person ddekany; 10.01.2015
x+["green"]
из <#list>
3000 раз вызвал проблему с производительностью, но ["green"] + x
исправил эту проблему! Речь идет о левой и правой руках. Кстати, решение @LaurentPireyn - еще один хороший способ.
- person soytian; 13.06.2018
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 не поддерживает модификацию последовательностей/хэшей. Это для отображения уже рассчитанных вещей, а не для расчета данных. Держите шаблоны простыми. Но не сдавайтесь, ниже вы увидите несколько советов и хитростей.
Ответ Лорана правильный и вполне приемлемый. Но вы также можете добавить значение, используя сокращенную запись:
<#assign x += ["green"]>
Теперь последовательность будет выглядеть так:
Sequence (5)
0 = "red" (String)
1 = 16 (BigDecimal)
2 = "blue" (String)
3 = "cyan" (String)
4 = "green" (String)