Velocity模板引擎中只有一个#foreach指令支持循环的遍历,每次都是循环一次。
但有时候会遇到在一行里面显示两列数据,也就是说需要在一次循环中读取两条数据,这就涉及到步长的概念。Velocity模板引擎的#foreach指令不支持设置步长,但可以通过下面的方式实现自定义步长:
## 假定$datas为传递到模板引擎的数组
#set($step = 0) ## 设置步长
#set($length = $datas.size()) ## velocity中数组的长度是size()而非length
#foreach($count in [1..$length])
#if($count %2 != 0)
#if($step < $length)
#set($data = $datas.get($step);
#else
#set($data = '')
#end
姓名:$!data.name 年龄:$!data.age
#if($step < $length)
#set($data = $datas.get($step);
#else
#set($data = '')
#end
姓名:$!data.name 年龄:$!data.age
#end
#end
在Velocity中,数组会转成类是List的类型,所以获取数组长度使用$datas.size()而不是$datas.length,通过下标获取元素的方式使用$datas.get($step),而不是$datas[$step]。
通过以上方式就是在Velocity模板引擎中实现自定义步长,虽然有些繁琐但是非常有效的。
参考资料:
velocity 模板的 foreach 如何支持步长
How to access/get the size of an array/collection in velocity templates?