2011-04-16 5 views

Respuesta

28

Sólo hay #foreach. Tendrás que poner algo iterable en tu contexto. P.ej. hacer bar disponible que es una matriz o Collection de algún tipo:

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

O si lo desea repetir un rango de números:

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

// Gracias! ¡No entiendo por qué no tienen el bucle más básico! – Moon

+4

foreach es el tipo de bucle más básico. porque es uno avanzado. –

+0

Tenga en cuenta que los rangos en Velocity son inclusivos, por lo que el segundo ejemplo se repetirá 34 veces, con '$ number 'pasando de 1 a 34. – Starwarswii

35

quería añadir esa iteración información privilegiada bucle foreach se puede acceder desde especial $foreach propiedad:

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

(última vez que revisé last contenía un error sin embargo)

+0

Exactamente lo que necesitaba. Necesitaba escribir el índice en mi plantilla. Gracias por esta publicación! –

+2

Si está atrapado con Velocity 1.6 (fe según lo utilizado por Confluence), solo '$ velocityCount' y' $ velocityHasNext' están disponibles (http://velocity.apache.org/engine/releases/velocity-1.6/user- guide.html # Loops) – sendmoreinfo

+0

También puede obtener estas variables desde dentro de los bucles anidados con '$ foreach.parent.whatever', por ej. '$ foreach.parent.parent.index' obtiene el índice del bucle externo desde un bucle foreach anidado triplemente. – Starwarswii

4

Encontré la solución cuando estaba tratando de hacer una lista en bucle. Ponga la lista en otra clase y cree getter y setter para la lista obj. por ejemplo

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

} 

Entonces para el contexto velocidad poner el extraclase que la entrada. por ej.

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

context.put ("data", e); Dentro de la plantilla

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

¿Es aplicable a los mapas? –

Cuestiones relacionadas