web-dev-qa-db-fra.com

Créez et parcourez un tableau dans Velocity Template Language

Comment créer un tableau en VTL et ajouter du contenu au tableau? Aussi comment récupérer le contenu du tableau par index?

33
raghav

Selon Apache Velocity User Guide , le côté droit des affectations peut être de type

  • Référence variable
  • Élément de liste
  • Littéral de chaîne
  • Référence de propriété
  • Référence de méthode
  • Nombre littéral
  • Liste des tableaux
  • Carte

Vous pouvez créer une liste vide, qui satisferait tous vos besoins pour un tableau, dans un modèle Apache Velocity avec une expression comme:

#set($foo = [])

ou initialiser des valeurs:

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

puis, ajoutez des éléments en utilisant la méthode Java add:

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

mais attention, comme la méthode Java .add () pour le type de liste renvoie une valeur booléenne, lorsque vous ajoutez un élément à la liste, Velocity affichera, par exemple, "true" ou " false "basé sur le résultat de la fonction" add ".

Une solution simple consiste à affecter le résultat de la fonction d'ajout à une variable:

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

Vous pouvez accéder aux éléments de la liste à l'aide des numéros d'index:

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

L'expression ci-dessus montrerait une étendue avec le texte "une chaîne". Cependant, le moyen le plus sûr d'accéder aux éléments d'une liste est d'utiliser les boucles foreach.

48
Irmak Cakmak

La création d'un tableau est simple:

#set($array = [])

Mettre un élément dans un tableau est également facile:

$array.add(23)

Obtenir un élément d'un tableau dépend de votre version de Velocity. Dans Velocity 1.6, vous devez utiliser

$array.get($index)

Depuis Velocity 1.7, vous pouvez utiliser le formulaire classique:

$array[$index]
7
Andrea Zenatti

Je n'ai pas créé de tableau en VTL, mais passé des tableaux au contexte VTL et les ai utilisés. En VTL, vous ne pouvez pas récupérer le contenu d'un tableau par index, vous utilisez uniquement foreach, comme exemple ce code est copié à partir de mon script VTL de génération Dynamic SQL:

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

Pour cette raison, nous ne pouvons pas non plus avoir de tableaux 2D. Lorsque j'avais besoin d'un tableau pour stocker 2 objets d'affilée, j'ai utilisé la solution de contournement pour définir une nouvelle classe et placer les objets de cette classe dans le tableau unidimensionnel.

1
Ozgur Ozturk