tutorial example vtl

vtl - example - Crear e iterar a través de una matriz en Velocity Template Language



apache velocity tutorial (3)

¿Cómo crear una matriz en VTL y agregar contenidos a la matriz? Además, ¿cómo recuperar los contenidos de la matriz por índice?


Crear una matriz es fácil:

#set($array = [])

Poner un elemento en una matriz también es fácil:

$array.add(23)

Obtener un elemento de una matriz depende de su versión de Velocity. En Velocity 1.6 debes usar

$array.get($index)

Desde Velocity 1.7 puedes usar la forma clásica:

$array[$index]


De acuerdo con la Guía del usuario de Apache Velocity , el lado derecho de las asignaciones puede ser de tipo

  • Referencia variable
  • Elemento de lista
  • Cadena literal
  • Referencia de propiedad
  • Referencia del método
  • Número literal
  • Lista de arreglo
  • Mapa

Puede crear una lista vacía, que satisfaga todas sus necesidades para una matriz, en una plantilla de Apache Velocity con una expresión como:

#set($foo = [])

o inicializar valores:

#set($foo = [42, "a string", 21, $myVar])

luego, agregue elementos usando el método de agregar Java:

$foo.add(53); $foo.add("another string");

pero tenga cuidado, ya que el método .add () de Java para el tipo de lista devuelve un valor booleano, cuando agrega un elemento a la lista, Velocity imprimirá, por ejemplo, "verdadero" o "falso" según el resultado del " añadir "función.

Una solución alternativa es asignar el resultado de la función de agregar a una variable:

#set($bar = $foo.add(42))

Puede acceder a los elementos de la lista utilizando números de índice:

<span>$foo[1]</span>

La expresión anterior mostraría un intervalo con el texto "una cadena". Sin embargo, la forma más segura de acceder a los elementos de una lista es usar bucles foreach.


No he creado una matriz en VTL, pero pasé las matrices al contexto de VTL y las utilicé. En VTL, no puede recuperar el contenido de la matriz por índice, solo usa foreach, como ejemplo, este código se copia de mi generación de SQL dinámico Script VTL:

#foreach( $col in $Columns ) SUM($col.DBColumn) AS ''''$col.Name''''#if($velocityCount!=$Columns.Count), #end #end

Por esta razón, tampoco podemos tener matrices 2D. Cuando necesitaba una matriz para almacenar 2 objetos en una fila, utilicé la solución para definir una nueva clase y colocar los objetos de esa clase en la matriz de una sola dimensión.