NVelocity 是否支持#for 循环?我浏览了文档,我能找到的只是#foreach 循环。
我想循环一个二维数组。
您可以在 foreach 循环中使用范围运算符[n..m]
来模拟正常循环。您还可以以通常的方式访问多维数组元素,例如$array[n][m]
.
例如,如果您有这样的二维数组(对不起 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
更新:
根据变更日志,显然仅在 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 处于死胡同。我们在我们的项目中使用它,使用类似于孤独7345 的代码来解决它的缺点,并且我们一直使用它,因为直到最近,没有更好或更简单的.net 模板引擎。
但是,我们正在考虑使用 Razor 作为独立模板引擎...
Hashtable entries = new Hashtable(StringComparer.InvariantCultureIgnoreCase);
entries["listtool"] = new ListTool();
VelocityContext context = new VelocityContext(entries);
在 listtool 类中,您编写 C# 代码来完成获取二维数组。
public Object get(Object list, int x,int y)
{
return ((IList)list)[x][y];
}
$listtool.get($obj,x,y);