2009-10-19 7 views
1

J'utilise struts2 avec Velocity 1.5 et Velocity Tools 1.3. Dans mon modèle, je veux faire une boucle comme:BigDecimal évalué en tant que chaîne dans Velocity, Struts2

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

$ {} item.qty est un BigDecimal mais il semble que son passé à la vitesse en tant que chaîne peut-être. Depuis cette boucle ne fonctionne pas. Le remplacement de $ count = 5 fonctionne bien, et imprimer $ {item.qty} me donne un résultat de 5. Velocity 1.5 et Tools 1.3 est la version la plus haute que Struts2 supportera. Des idées? Solutions de contournement? Merci

+0

Est-ce que changer 'qty' en int, dans le haricot, fonctionne? –

Répondre

0

Je pense que vous devez convertir/convertir en un entier pour que votre boucle fonctionne.

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

Je n'avais pas réalisé que c'était possible avec Velocity. Merci! – Fedor

0

peut-être vous avez besoin de mettre en œuvre votre propre iterator - il va juste enregistrer le début et la fin de la liste des bigDecimals, et retourner l'actuel. De cette façon, vous pouvez avoir une liste de taille illimitée des nombres (je suppose que ce que vous vouliez parce que vous utilisez BigDecimals Sinon, il suffit d'utiliser un int ou long.):

#set ($countIterator = ${item.qtyIterator}) 
#foreach($i in $countIterator) 
    ${i} 
    ....use $i as a string... 
#end 

et

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

Je ne pense pas qu'il a vraiment besoin d'une boucle qui fait plus d'itérations que ne peut en contenir un nombre entier. Ce modèle prendrait beaucoup de temps pour produire et produire une sortie ÉNORME. – Thilo

+0

@Thilo: c'est vrai - mais juste au cas où ..... – Chii

Questions connexes