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

Создание и повторение массива в языке шаблонов Velocity

Как создать массив в VTL и добавить содержимое в массив? Также как получить содержимое массива по индексу?

4b9b3361

Ответ 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].