2009-10-19 48 views
1

我正在使用struts2與Velocity 1.5和Velocity Tools 1.3。在我的模板我想去做一個循環:BigDecimal評估爲Velocity中的字符串,Struts2

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

$ {} item.qty是一個BigDecimal,但似乎它傳遞給速度爲String可能。由於此循環不起作用。替換爲$ count = 5可以正常工作,並且打印$ {item.qty}會給我一個結果5. Velocity 1.5和Tools 1.3是Struts2將支持的最高版本。想法?解決方法?謝謝

+0

是否將'qty'改爲int,在bean中有效? – 2009-10-20 04:59:54

回答

0

我想你需要將它轉換/整數轉換爲你的循環工作的整數。

#set ($count = $item.getQty().intValue()) 
+0

我沒有意識到這是速度可能的。謝謝! – Fedor 2009-10-22 03:19:49

0

也許你需要實現自己的迭代器 - 它只是存儲BigDecimals的列表的開始和結束,並返回當前之一。通過這種方式,你可以有一個數字無限大小的列表(我認爲是你想要的,因爲你正在使用BigDecimals的。否則,只使用int或長):

#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();} 
} 
+0

我不認爲他真的需要一個循環,可以進行更多的迭代,而不是整數。該模板需要很長時間才能呈現併產生巨大的輸出。 – Thilo 2009-10-22 03:32:36

+0

@Thilo:那是真的 - 但是,以防萬一...... – Chii 2009-10-22 08:40:36