2010-02-15 8 views
0

J'ai une page que je convertis de Velocity en JSP. J'ai quelques expressions complexes que je ne peux pas comprendre comment convertir au langage JSTL el.Comment convertir une expression de vélocité en JSP?

#set ($col = 0) 

#foreach ($hour in $form.bean.grid.hours) 
    $hour.cells.get($col).hourOfDay 
    #set ($col = $col + 1) 
#end 

Heure est un objet qui contient une cellule qui contient une liste. J'ai besoin de faire passer chaque élément à travers un index numérique.

Des idées?

Répondre

1

Fondamentalement, vous affichez les heures de la journée. Utilisation de JSTL,

<c:forEach items="${form.bean.grid.hours}" var="hour" varStatus="index"> 
    ${hour.cells[index.count - 1].hourOfDay} 
</c:forEach> 

Le count en index.count commence à compter de 1 à N (donc nier par 1).

+0

Merci! Je comprends maintenant. :) – sproketboy

+0

Utilisez plutôt 'LoopTagStatus # getIndex()', c'est-à-dire 'index.index' dans l'exemple donné. Il est basé sur 0, pas besoin de le soustraire avec 1. Javadoc ici: http://java.sun.com/javaee/5/docs/api/javax/servlet/jsp/jstl/core/LoopTagStatus.html – BalusC

+0

Pour éviter confusion, je déclarerais 'varStatus' comme' loop'. C'est à dire. ' $ {foo [boucle.index]}'. Beaucoup plus auto-expliquant. – BalusC

0

Quelque chose comme:

<c:set var="col" value="0"/> 

<c:forEach items="${form.bean.grid.hours}" var="hour"> 
    ${hour.cells[col].hourOfDay} 
    <c:set var="col" value="${col + 1}"/> 
</c:forEach> 

Cela ne fonctionnera que si hour.cells est un Map, de sorte que l'expression cells.get($col) dans l'original appelle get() sur cette Map. S'il s'agit d'un appel de méthode arbitraire, cela ne fonctionnera pas, car JSP EL ne peut gérer que les propriétés ou collections de beans. Comme l'indique @EliteGentleman, vous pouvez utiliser le varStatus sur la boucle forEach pour supprimer le besoin d'un compteur de boucle séparé, ce que vous devez faire. Mon fragment était une traduction plus littérale.

+0

Ahh, l'ampoule est allumé. Merci. Je vois maintenant comment EL fonctionne différemment de la vitesse. – sproketboy