2017-04-23 93 views
1

我傳入一個帶有String映射到一個ArrayList的HashMap。 該映射包含兩個條目,它們是ArrayLists長度相同,我希望它們水平對齊,所以我認爲foreach-range循環比單獨使用foreach循環更好。使用速度模板通過索引訪問ArrayList

我:

#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 

速度只是打印而不是$ entry1.get($ I-1)和花費$ entry2.get($ I-1)從字面上$ entry1.size()倍,注入相應ArrayList索引的值。

的速度Documentation說:

注意:對於該ArrayList例如與[..]運營商所定義的元素是使用ArrayList類定義的方法訪問。因此,例如,您可以使用$ monkey.Say.get(0)訪問上面的第一個元素。

而且例子是:

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

我是否正確訪問ArrayList的?

+0

我認爲你需要把空間之前和破折號之後,減法工作。另見[this](http://stackoverflow.com/questions/15448108/subtraction-is-not-working-with-velocity-template)。 – gerry

回答

1

所以,我仍然不確定,什麼是錯的我上面的代碼... 這是我的工作,但周圍:

#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 

希望它可以幫助誰可以跨在類似的問題上運行任何人未來。 雖然我仍然想知道我的初始代碼有什麼問題!

0

我注意到速度不是在get()方法$entry1.get($i-1)裏面評估表達式。

嘗試這樣:

#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