web-dev-qa-db-fra.com

Comment utiliser la boucle 'for' dans le modèle de vitesse?

Je viens de googler pour "for loop", mais il semble que la vélocité ait "foreach" uniquement.

Comment utiliser "for loop" dans le modèle de vélocité?

24
Moon

Il y a seulement #foreach. Vous devrez mettre quelque chose d'itérable dans votre contexte. Par exemple. rendre bar disponible c'est un tableau ou Collection d'une sorte quelconque:

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

Ou si vous souhaitez parcourir une plage de nombres:

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

Je voulais ajouter que les informations d'itération dans la boucle foreach sont accessibles à partir de $foreach propriété:

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

(la dernière fois que j'ai vérifié que last contenait un bogue)

39
serg

J'ai trouvé la solution lorsque j'essayais de boucler une liste. Mettez la liste dans une autre classe et créez getter et setter pour la liste obj. par exemple

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;
    }

}

Ensuite, pour le contexte de vitesse, placez l'Extraclass comme entrée. par exemple.

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

context.put ("données", e); Dans le modèle

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