Как получить доступ к элементам массива после использования string.split в Velocity? - PullRequest
6 голосов
/ 06 января 2012

Я использую Velocity Templating Language и в настоящее время имею:

#set ( $stringList = $string.split(",") )

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

Мой вопроскак мне теперь получить доступ к каждому из элементов в $ stringList?

Я пытался:

$stringList.get(0)
$stringList[0]
$stringList.[0]
${stringList}.get(0)

Я использую Velocity в JIRA, и JIRA использует Velocity версии 1.4, которая, очевидно, нене имеет поддержки для доступа к массивам, как было описано выше.

Любая помощь очень ценится.

Ответы [ 4 ]

6 голосов
/ 06 июля 2012

Проверено на скорости 1.6.

#foreach ($element in $string.split(";"))
   $element
#end
1 голос
/ 03 сентября 2013

Начиная с Velocity 1.6, все ссылки на массивы теперь «магически» обрабатываются, как если бы они были списками фиксированной длины. Это означает, что вы можете вызывать java.util.List методы для ссылок на массивы. Итак, если у вас есть ссылка на массив (скажем, это String[] с тремя значениями), вы можете сделать:

$myarray.isEmpty()

$myarray.size()

$myarray.get(2) 

$myarray.set(1, 'test')

Источник: http://velocity.apache.org/engine/releases/velocity-1.7/user-guide.html#methods

1 голос
/ 07 января 2012

Это работает, когда я преобразую массив в список с помощью Arrays.asList (), а затем использую методы из списка для доступа к элементам.

Я добавляю в контекст следующее:

context.put("arrays", Arrays.class);

В шаблоне скорости я использую:

#set ( $array = $getarray.getArray() )

$arrays.asList($array).get(0)

со строковым массивом следующим образом

new String[] {"test1", "test2", "test3", "test4"};

Я получаю ожидаемый результат:

test1
0 голосов
/ 20 октября 2012

Также возможно помещать элементы в массив, подобный этому.

#set ($matchingProducts = [])
#set($bar = $matchingProducts.add($p))
...