Как использовать цикл «для» в шаблоне скорости? - PullRequest
23 голосов
/ 16 апреля 2011

Я только что погуглил по «циклу», но похоже, что скорость имеет только «foreach».

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

Ответы [ 3 ]

38 голосов
/ 16 апреля 2011

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

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

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

34 голосов
/ 16 апреля 2011

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

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

Или, если вы хотите перебрать диапазон номеров:

#foreach ($number in [1..34])
    $number
#end
6 голосов
/ 31 августа 2013

Я нашел решение, когда пытался зациклить список.Поместите список в другой класс и создайте 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 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
...