Подтвердить что ты не робот

Добавить значения в последовательность?

Я создал последовательность FreeMarker в своем шаблоне:

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

Как добавить дополнительные значения в последовательность?

4b9b3361

Ответ 1

Вам нужно создать новую последовательность, объединив x и последовательность, содержащую только новый элемент:

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

Ответ 2

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 не поддерживает модификацию последовательностей/хэшей. Это для отображения уже рассчитанных вещей, а не для вычисления данных. Храните шаблоны просто. Но не отчаивайтесь, вы увидите несколько советов и трюков.

Ответ 3

Лоран ответ правильный и вполне приемлемый. Но вы также можете добавить значение, используя сокращение:

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

Теперь последовательность будет выглядеть следующим образом:

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