簡體   English   中英

對於NVelocity中的循環

[英]For loop in NVelocity

NVelocity是否支持#for循環? 我查看了文檔,我能找到的就是#foreach循環。

我想循環一個二維數組。

您可以在foreach循環中使用范圍運算符[n..m]來模擬正常循環。 您也可以通常的方式訪問多維數組元素,如$array[n][m]

例如,如果你有這樣的2d數組(抱歉Java代碼):

String[][] testArray = new String[][] {{"a1","b1"},{"a2","b2"},{"a3","b3"}};

您可以像這樣在Velocity中循環它:

#set($sizeX = $testArray.size() - 1)
#set($sizeY = $testArray[0].size() - 1)
#foreach($i in [0..$sizeX])
    #foreach($j in [0..$sizeY])
        e[$i][$j] = $testArray[$i][$j] <br/>
    #end
#end

哪個輸出:

e[0][0] = a1
e[0][1] = b1
e[1][0] = a2
e[1][1] = b2
e[2][0] = a3
e[2][1] = b3 

更新

顯然,根據changelog,僅在Velocity 1.7b1中引入了括號內的語法。 在舊版本中,我們只需要用get(i)替換括號,因為Velocity中的數組由ArrayList (在Java中)支持。 所以,這應該工作:

#set($sizeX = $testArray.size() - 1)
#set($sizeY = $testArray.get(0).size() - 1)
#foreach($i in [0..$sizeX])
    #foreach($j in [0..$sizeY])
        e[$i][$j] = $testArray.get($i).get($j) <br/>
    #end
#end

唉,NVelocity“原樣”不for循環,只有支持的foreach。 甚至Castle Project的fork也只改進了foreach循環。

AFAIK,對於.NET項目,NVelocity處於死胡同狀態。 我們在我們的項目中使用它,使用與lonely7345不同的代碼來解決它的缺點,並且我們繼續使用它,因為直到最近,沒有更好或更簡單的.net模板引擎。

但是,我們正在考慮將Razor用作獨立的模板引擎 ......

Hashtable entries = new Hashtable(StringComparer.InvariantCultureIgnoreCase);
entries["listtool"] = new ListTool();
VelocityContext context = new VelocityContext(entries);

在listtool類中,您編寫C#代碼來完成fetch 2維數組。

public Object get(Object list, int x,int  y)
    {
         return  ((IList)list)[x][y];
    }

$listtool.get($obj,x,y);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM