Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[JSTL] une boucle pour 2 listes

3 réponses
Avatar
Vincent
Bonjour,

J'ai 2 listes, dont les éléments sont concordants.
Je m'explique : dans la 'liste1', j'ai par exemple un prenom et dans la
'liste2', j'ai disons le nom. En simplifiant, je voudrais pouvoir afficher :
"nom1 prenom1"
"nom2 prenom2"
...

Il s'agit donc de mettre dans une variable 'prenom' (<c:set>?) la valeur de
l'élément à l'indice i (défini dans la boucle qui parcourt la liste des
noms), pour pouvoir par la suite le manipuler tout comme la variable 'nom'.

<c:forEach var="nom" items="${liste1}" varStatus="i">
// Faire qqch pour que dans "prenom" il y a l'élément 'liste2[i]'

</c:forEach>

J'espère que je suis clair!

Merci d'éclairer ma lanterne,

--
Vincent

3 réponses

Avatar
Arnaud Roger

J'ai 2 listes, dont les éléments sont concordants.
Je m'explique : dans la 'liste1', j'ai par exemple un prenom et dans la
'liste2', j'ai disons le nom. En simplifiant, je voudrais pouvoir afficher
:

"nom1 prenom1"
"nom2 prenom2"
...
<snip>


probléme de design => changer de design

la solution la plus adéquate est de creer un object
contenant le nom et le prenom qui se retrouvera dans une seule liste

Arnaud R.

Avatar
Arnaud Roger

Merci pour ton aide.
de rien :)


Finalement, la réponse à ma question était toute simple :
<c:set var="prenom" value="${liste2[i.index]}"/>.


serieusement la solution de 2 lists avec une contenant le nom et l'autre le
prenom me parais pas satisfaisante.

d'abords parce que d'un point de vue modelisation ca tient pas le coup
a priori le nom et le prenom sont clairement des proprietés qui
on tout interet a se retrouver dans le meme objet.

ensuite la List est certainement une ArrayList, mais elle peut
aussi tres bien etre changer par une LinkedList auquel cas
un get(int index) dessus est relativement couteux.

et finalement en mettant le nom et le prenom dans une liste
rien ne vous mets a l'abris d'un bug de decalage entre le nom
et le prenom.

on se retrouve avec une dependance trop importante entre la jsp
et le controller, Et tout changement dans le controller risque d'invalidé
le code de la jsp.

Arnaud R.


--
Vincent, qui débute avec les JSTL




Avatar
Vincent
"Arnaud Roger" wrote in message
news:bfmjna$6an$

Finalement, la réponse à ma question était toute simple :
<c:set var="prenom" value="${liste2[i.index]}"/>.


serieusement la solution de 2 lists avec une contenant le nom et l'autre
le

prenom me parais pas satisfaisante.

d'abords parce que d'un point de vue modelisation ca tient pas le coup
a priori le nom et le prenom sont clairement des proprietés qui
on tout interet a se retrouver dans le meme objet.

ensuite la List est certainement une ArrayList, mais elle peut
aussi tres bien etre changer par une LinkedList auquel cas
un get(int index) dessus est relativement couteux.

et finalement en mettant le nom et le prenom dans une liste
rien ne vous mets a l'abris d'un bug de decalage entre le nom
et le prenom.

on se retrouve avec une dependance trop importante entre la jsp
et le controller, Et tout changement dans le controller risque d'invalidé
le code de la jsp.

Arnaud R.



Merci pour toutes ces remarques. Mais les divers ArrayList sur lesquels
j'itère sont créés par différentes Actions, éventuellement à divers moments.
En tout état de cause, je ne pourrai pas les regrouper sous un seul objet...
Mais je me pencherai plus sur la question, car c'est vrai que ça pose un
réel problème de concordance d'indices qui peut être désastreux s'il manque
une donnée (créant ainsi un décalage).

A voir.

--
Vincent