Я хочу добавить элемент в список в моем макросе Velocity. Это единственный способ избежать появления «истинного» текста на выходе Velocity?
#set($path = []) #set($swallow = "a") #set ($swallow = $path.add("blaablaa"))
Да, если ты хочешь заткнуться, тогда #set - твой друг. Многие люди сокращают это с помощью такого макроса:
#macro( call $this )#set( $stfu = $this )#end
Тогда вы можете сократить до
#call( $path.add('blaablaa') )
Я должен согласиться с Теренсом Парром (отцом StringTemplate ), который имеет соответствующие комментарии в интервью с Artima и хорошей статьей о разделении моделей и видов .
Шаблоны должны быть ограничены чистой презентацией. Так же, как мы не должны помещать детали уровня представления в модель, мы не должны помещать манипуляции с данными в наши шаблоны. Выполнение любого из них обычно приводит к усложнению обслуживания и даже усложняет определение , где для обслуживания.
Основываясь на моем собственном опыте работы с Velocity и StringTemplate, я настоятельно рекомендую взять проблему в вашем вопросе (артефакты манипулирования данными, делающими шаблон более сложным) в качестве подсказки и перенести все манипуляции со структурами данных на уровень Java .