Как лучше всего получить доступ к массиву внутри Velocity?

У меня есть массив 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

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


person Sergio del Amo    schedule 10.10.2008    source источник


Ответы (8)


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

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

person Nathan Bubna    schedule 02.02.2009

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

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

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

person Brian    schedule 10.10.2008

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] в скорости.
Надеюсь, это сработает :)

person Rajesh Chowdary    schedule 22.12.2009

Скорость 1,6

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

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

person liquid    schedule 26.01.2019

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

person Community    schedule 21.08.2009


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

person Luke Quinane    schedule 13.05.2009

У меня такой же вопрос, ответ был в другой теме

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

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

person Valentino Ciciarelli    schedule 10.12.2014
comment
Может ли кто-нибудь ответить на этот stackoverflow.com/questions/31116553/ - person Manoj Kumar; 30.06.2015