我正在使用带有Velocity 1.5和Velocity Tools 1.3的struts2。在我的模板中,我想做一个循环:
#set ($count = ${item.qty})
#foreach($i in [1..$count])
${item.price}
...........
#end
$ {item.qty}是一个BigDecimal,但它似乎可以作为String传递给Velocity。由于此循环不起作用。替换为$ count = 5工作正常,打印$ {item.qty}给我的结果为5. Velocity 1.5和Tools 1.3是Struts2支持的最高版本。想法?解决方法?感谢
答案 0 :(得分:0)
我认为您需要将其转换/转换为整数才能使循环正常工作。
#set ($count = $item.getQty().intValue())
答案 1 :(得分:0)
也许您需要实现自己的迭代器 - 它只会存储bigDecimals列表的开头和结尾,并返回当前的迭代器。通过这种方式,您可以拥有无限大小的数字列表(我认为这是您想要的,因为您使用的是BigDecimals。否则,只需使用int或long):
#set ($countIterator = ${item.qtyIterator})
#foreach($i in $countIterator)
${i}
....use $i as a string...
#end
和
public class QuantityIterator implement Iterator<BigDecimal> {
QuantityIterator(BigDecimal start, BigDecimal end) { this.start = start;this.end=end;}
//..implement the iterator methods like hasNext() etc
public hasNext() {return this.current.compareTo(this.end) < 0;} //current <= end
public BigDecimal next() {
if (!hasNext()) {
throw new NoSuchElementException();
}
this.current = this.current.add(BigDecimal.ONE);
return this.current;
}
public void remove(){throw new UnsupportedException();}
}