BigDecimal在Velocity,Struts2中被评估为一个字符串

时间:2009-10-19 21:53:18

标签: java struts2 velocity

我正在使用带有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支持的最高版本。想法?解决方法?感谢

2 个答案:

答案 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();}
}