Как создать массив в VTL и добавить содержимое в массив? Также как получить содержимое массива по индексу?
Создание и повторение массива в языке шаблонов Velocity
Ответ 1
Согласно Руководство пользователя Apache Velocity, правая часть назначений может иметь тип
- Переменная ссылка
- Элемент списка
- Строковый литерал
- Ссылка на ресурс
- Ссылка на метод
- Литеральный номер
- ArrayList
- Карта
Вы можете создать пустой список, который удовлетворит все ваши потребности в массиве в шаблоне Apache Velocity с выражением типа:
#set($foo = [])
или инициализировать значения:
#set($foo = [42, "a string", 21, $myVar])
затем добавьте элементы, используя метод добавления Java:
$foo.add(53);
$foo.add("another string");
но будьте осторожны, так как метод Java.add() для типа списка возвращает логическое значение, когда вы добавляете элемент в список, Velocity будет печатать, например, "true" или "false" на основе результата функции "добавить".
Простая работа - это назначение результата функции добавления переменной:
#set($bar = $foo.add(42))
Вы можете получить доступ к элементам списка с помощью индексных номеров:
<span>$foo[1]</span>
Выражение выше показало бы интервал с текстом "строка". Однако самым безопасным способом доступа к элементам списка является использование циклов foreach.
Ответ 2
Создание массива очень просто:
#set($array = [])
Вложение элемента в массив также легко:
$array.add(23)
Получение элемента из массива зависит от версии Velocity. В Velocity 1.6 вы должны использовать
$array.get($index)
Так как Velocity 1.7 вы можете использовать классическую форму:
$array[$index]
Ответ 3
Я не создал массив в VTL, но передал массивы в контексте VTL и использовал их. В VTL вы не можете извлекать содержимое массива по индексу, вы используете только foreach, например, этот код копируется из моего поколения Dynamic SQL VTL Script:
#foreach( $col in $Columns ) SUM($col.DBColumn) AS ''$col.Name''#if($velocityCount!=$Columns.Count), #end #end
По этой причине мы также не можем иметь 2D-массивы. Когда мне понадобился массив для хранения 2 объектов в строке, я использовал обходной путь для определения нового класса и размещения объектов этого класса в одномерном массиве.
Ответ 4
Есть ли способ получить уникальные элементы массива в новом массиве, сравнивая два массива
$array1 = [1,2,3]
$array2 = [1,2,3,4,5]
Сравните array1
и array2
и мы получим окончательный массив как [4,5]
.