Добавление значений в SimpleSequence - FreeMarker - PullRequest
22 голосов
/ 01 апреля 2011

Как мы можем добавить значения в уже созданный экземпляр SequenceModel во Freemarker?

Для примера: у меня есть ниже способ создания списка (SequenceModel):

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

Теперь есть способ, я мог бы добавить еще один цвет в мой список выше?

Ответы [ 2 ]

43 голосов
/ 01 апреля 2011

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

<#assign x = x + [ "green" ] />
14 голосов
/ 19 января 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...