Je veux faire une boucle dans mon ISML modèle sans objet itérable. Pendant l'exécution de ce modèle, la condition ou plutôt le nombre d'itérations serait défini. Est-il possible d'avoir une statemant en boucle comme en java "for (int i = 0; i < 5; i ++)" mais sans code Java complexe?Quelle est la meilleure façon de faire une boucle dans ISML sans objet itérable?
Répondre
Il n'y a aucun moyen vraiment élégant, je crois. C'est parce que ces calculs n'appartiennent pas à la couche de vue. Cela est vrai non seulement pour ISML mais pour d'autres moteurs de gabarit, par ex. Thymeleaf. Voir here.
ISLOOP
nécessite une des instances Java standard suivantes dans iterator
:
java.util.Enumeration
java.util.Iterator
java.util.Collection
Par exemple:
<isloop iterator="products" alias="product" counter="c">
</isloop>
Le flux de contrôle dans la boucle peut être modifiée avec isbreak
et isnext
:
<isloop
iterator = "{ISML variable identifier}"
[ alias = "{simple name}" ]
[ counter = "{counter name}" ]
>
... some HTML and ISML code ...
[<isnext>]
[<isbreak>]
</isloop>
Si vous vraiment besoin que vous pouvez créer, par exemple, votre propre iterator aussi simple que cela et le mettre dans le dictionnaire de pipeline à partir d'un pipeline ou un module ISML:
class MyIterator implements Iterator<Integer>
{
private final int max;
private int current;
MyIterator(int max)
{
this.max = max;
}
@Override
public boolean hasNext()
{
return current < max;
}
@Override
public Integer next()
{
return current++;
}
}
Vous pouvez également utiliser JSP simple scriptlet intégré dans le module ISML, ISML etc. Si vous avez besoin d'une réponse plus précise s'il vous plaît fournir plus de contexte dans votre question.