1

我正在使用带有 Velocity 1.5 和 Velocity Tools 1.3 的 struts2。在我的模板中,我想做一个循环,如:

#set ($count = ${item.qty})
#foreach($i in [1..$count])
    ${item.price}
     ...........
#end

${item.qty} 是一个 BigDecimal 但它似乎作为一个字符串传递给了 Velocity。由于此循环不起作用。替换为 $count = 5 可以正常工作,打印 ${item.qty} 给我的结果是 5。Velocity 1.5 和 Tools 1.3 是 Struts2 将支持的最高版本。想法?解决方法?谢谢

4

2 回答 2

0

我认为您需要将其转换/转换为整数才能使循环正常工作。

#set ($count = $item.getQty().intValue())
于 2009-10-20T05:37:36.750 回答
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();}
}
于 2009-10-20T05:47:17.120 回答