2017-04-23 2 views
1

Je passe un HashMap avec un mappage String à une ArrayList. La carte contient deux entrées, qui sont ArrayLists de la même longueur, et je veux les aligner horizontalement, donc j'ai pensé qu'une boucle foreach-range fonctionnerait mieux qu'une boucle foreach sur les entrées individuellement.Accès à ArrayList par index à l'aide de modèles de vélocité

J'ai:

#foreach($i in [1..$entry1.size()]) 
    <li> 
     <h3>$entry1.get($i-1)</h3> 
     <video width="320" height="240" controls> 
      <source src="$entry2.get($i-1)" type="video/mp4"> 
     </video> 
    </li> 
#end 

Velocity qu'afficher $ entry1.get (i-1 $) et prend entry2.get de $ ($ i-1) littéralement entry1.size $() fois, au lieu de injecter les valeurs des indices ArrayList correspondants.

La vitesse Documentation dit:

NOTE: Pour l'exemple ArrayList les éléments définis avec l'opérateur [..] sont accessibles en utilisant les méthodes définies dans la classe ArrayList. Ainsi, par exemple, vous pouvez accéder au premier élément ci-dessus en utilisant $ monkey.Say.get (0).

Et l'exemple était:

#set($monkey.Say = ["Not", $my, "fault"]) ## ArrayList 

Suis-je accéder correctement ArrayList?

+0

Je pense que vous avez besoin de mettre des espaces avant et après le tableau de bord, pour la soustraction de travailler. Voir aussi [this] (http://stackoverflow.com/questions/15448108/subtraction-is-not-working-with-velocity-template). – gerry

Répondre

1

Donc, je ne suis toujours pas sûr de ce qui était mal avec mon code ci-dessus ... Ce fut mon travail autour si:

#foreach($title in $entry1) 
    <li> 
    <h3>$title</h3> 
    <video width="320" height="240" controls> 
     <source src="$entry2.get($foreach.index)" type="video/mp4"> 
    </video> 
    </li> 
#end 

espère que cela aide tous ceux qui peuvent courir à travers un problème similaire l'avenir. Je voudrais quand même savoir ce qui n'allait pas avec mon code initial!

0

J'ai remarqué que la vitesse n'évalue pas l'expression à l'intérieur de la méthode get() à $entry1.get($i-1).

Essayez quelque chose comme ceci:

#foreach($i in [1..$entry1.size()]) 
    #set($index = $i - 1) 
    <li> 
     <h3>$entry1.get($index)</h3> 
     <video width="320" height="240" controls> 
      <source src="$entry2.get($index)" type="video/mp4"> 
     </video> 
    </li> 
#end