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

Каков наилучший способ доступа к массиву внутри 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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

Ответ 6

Я закончил использование ListTool из файла velocity-tools.jar. Он имеет методы доступа к элементам массива и также получает его размер.