Каков наилучший способ доступа к массиву внутри Velocity? - PullRequest
22 голосов
/ 10 октября 2008

У меня есть массив Java, такой как:

String[] arr = new String[] {"123","doc","projectReport.doc"};

На мой взгляд, естественный способ доступа будет:

 #set($att_id = $arr[0])
 #set($att_type = $arr[1])
 #set($att_name = $arr[2])

Но это не работает. Я пришел с этим обходным путем. Но это слишком много кода для такой простой задачи.

#set($counter = 0)
#foreach($el in $arr)
    #if($counter==0)
        #set($att_id = $el)
    #elseif($counter==1)
        #set($att_type = $el)
    #elseif($counter==2)
         #set($att_name = $el)
    #end
    #set($counter = $counter + 1)
#end

Есть ли другой способ?

Ответы [ 8 ]

25 голосов
/ 03 февраля 2009

Вы можете использовать Velocity 1.6: для массива с именем $array можно просто сделать $array.get($index).

В грядущей Скорости 1.7 каждый сможет сделать $array[$index] (а также $list[$index] и $map[$key]).

8 голосов
/ 10 октября 2008

Вы можете обернуть массив в List, используя Arrays.asList(T... a). Новый объект List поддерживается исходным массивом, поэтому он не выделяет копию. Даже изменения, внесенные в новый список, будут распространяться обратно в массив.

Тогда вы можете использовать $list.get(int index), чтобы вывести свои объекты в Velocity.

Если вам нужно получить один или два объекта из массива, вы также можете использовать Array.get(Object array, int index) получить элемент из массива.

2 голосов
/ 22 декабря 2009
String[] arr = new String[] {"123", "doc", "projectReport.doc"}; 

На мой взгляд, естественный способ доступа был бы:

 #set($att_id = $arr[0]) 
 #set($att_type = $arr[1]) 
 #set($att_name = $arr[2]) 

Значение для этого можно получить с помощью $array.get("arr", 1), потому что нет прямого способа получить значение из массива, например, $att_id = $arr[0] по скорости.
Надеюсь, что это работает:)

1 голос
/ 21 августа 2009

существует неявный счетчик $ speedCount, который начинается со значения 1, поэтому вам не нужно создавать собственный счетчик.

1 голос
/ 13 октября 2008

Ответ Брайана действительно верен, хотя вам, возможно, хотелось бы знать, что грядущая Velocity 1.6 будет иметь прямую поддержку массивов; см. документацию Velocity для получения дополнительной информации.

0 голосов
/ 26 января 2019

Скорость 1.6

$myarray.isEmpty()
$myarray.size()
$myarray.get(2)
$myarray.set(1, 'test')

http://velocity.apache.org/engine/1.7/user-guide.html

0 голосов
/ 10 декабря 2014

У меня тот же вопрос, и он получил ответ в другой теме

#set ( $Page = $additionalParams.get('Page') )
#set ( $Pages = [] )
#if ( $Page != $null && $Page != "" )
    #foreach($i in $Page.split(";"))
        $Pages.add($i)
    #end
#end

Индексирование массива в шаблонах Confluence / Velocity

0 голосов
/ 13 мая 2009

В итоге я использовал ListTool из speed-tools.jar. У него есть методы для доступа к элементам массива, а также для получения его размера.

...