web-dev-qa-db-fra.com

Quel est le meilleur moyen d'accéder à un tableau à l'intérieur de Velocity?

J'ai un tableau Java tel que:

String[] arr = new String[] {"123","doc","projectReport.doc"};

À mon avis, le moyen naturel d’accéder serait:

 #set($att_id = $arr[0])
 #set($att_type = $arr[1])
 #set($att_name = $arr[2])

Mais ça ne marche pas. Je suis venu avec cette solution de contournement. Mais c'est un peu trop de code pour une tâche aussi facile.

#set($counter = 0)
#foreach($el in $arr)
    #if($counter==0)
        #set($att_id = $el)
    #elseif($counter==1)
        #set($att_type = $el)
    #elseif($counter==2)
         #set($att_name = $el)
    #end
    #set($counter = $counter + 1)
#end

Y-a t'il une autre possibilité?

21
Sergio del Amo

Vous pouvez utiliser Velocity 1.6: pour un tableau nommé $array, vous pouvez simplement faire $array.get($index).

Dans le prochain Velocity 1.7, on pourra faire $array[$index] (ainsi que $list[$index] et $map[$key]).

24
Nathan Bubna

Vous pouvez envelopper le tableau dans un List en utilisant Arrays.asList(T... a) . Le nouvel objet List est sauvegardé par le tableau d'origine afin de ne pas allouer une copie de manière inutile. Même les modifications apportées à la nouvelle liste se répercuteront dans le tableau.

Ensuite, vous pouvez utiliser $list.get(int index) pour obtenir vos objets dans Velocity.

Si vous ne devez extraire qu'un ou deux objets d'un tableau, vous pouvez également utiliser Array.get(Object array, int index) Pour obtenir un élément d'un tableau.

8
Brian

il existe un compteur implicite $ velocityCount qui commence par la valeur 1, vous n'avez donc pas à créer votre propre compteur.

2
kez
String[] arr = new String[] {"123", "doc", "projectReport.doc"}; 

À mon avis, le moyen naturel d’accéder serait: 

 #set($att_id = $arr[0]) 
 #set($att_type = $arr[1]) 
 #set($att_name = $arr[2]) 

La valeur de this peut être obtenue en utilisant $array.get("arr", 1) car il n’existe aucun moyen direct d’obtenir la valeur d’un tableau comme $att_id = $arr[0] en vélocité.
Esperons que ça marche :)

2
Rajesh Chowdary

La réponse de Brian est en effet correcte, bien que vous souhaitiez peut-être savoir que la prochaine version de Velocity 1.6 prend directement en charge les tableaux; voir la documentation Velocity pour plus d'informations.

1

Velocity 1.6

$myarray.isEmpty()
$myarray.size()
$myarray.get(2)
$myarray.set(1, 'test')

http://velocity.Apache.org/engine/1.7/user-guide.html

0
bsod

J'ai la même question et il a été répondu sur un autre fil

#set ( $Page = $additionalParams.get('Page') )
#set ( $Pages = [] )
#if ( $Page != $null && $Page != "" )
    #foreach($i in $Page.split(";"))
        $Pages.add($i)
    #end
#end

Indexation de tableaux dans les modèles Confluence/Velocity

0

J'ai fini par utiliser le ListTool de Velocity-tools.jar. Il dispose de méthodes pour accéder aux éléments d'un tableau et obtenir sa taille.

0
Luke Quinane