Как использовать цикл "для" в шаблоне скорости?

Я просто googled для "for loop", но похоже, что скорость имеет только "foreach".

Как использовать "для цикла" в шаблоне скорости?

Ответ 1

Там только #foreach. Вам нужно будет сделать что-то итерабельное в вашем контексте. Например. сделать bar доступным, чтобы массив или Collection некорректного:

#foreach ($foo in $bar)
    $foo
#end

Или если вы хотите выполнить итерацию по диапазону чисел:

#foreach ($number in [1..34])
    $number
#end

Ответ 2

Требуется добавить, что информацию об итерации внутри цикла foreach можно получить из специального свойства $foreach:

#foreach ($foo in $bar)
    count: $foreach.count
    index: $foreach.index
    first: $foreach.first 
    last:  $foreach.last
#end

(последний раз, когда я проверил last, содержал ошибку, хотя)

Ответ 3

Я нашел решение, когда пытался создать список. Поместите список в другой класс и создайте getter и setter для списка obj. например,

public class ExtraClass {
    ArrayList userList = null;

    public ExtraClass(List l) {
        userList = (ArrayList) l;
    }

    public ArrayList getUserList() {
        return userList;
    }

    public void setUserList(ArrayList userList) {
        this.userList = userList;
    }

}

Затем для контекста скорости поставьте Extraclass в качестве входного. например.

  ExtraClass e = new ExtraClass(your list);
VelocityContext context = new VelocityContext();

context.put( "data", e); Внутри шаблона

#foreach ($x in $data.userList)
        $x.fieldname    //here $x is the actual obj inside the list
    #end