web-dev-qa-db-fra.com

Comment parcourez-vous une liste d'objets?

J'ai une classe d'utilisateurs qui contient un nom d'utilisateur String. J'ai une liste d'utilisateurs que j'essaie d'afficher dans un tableau en utilisant

                         <s:iterator value="users" id="list">
                                <tr>
                                    <td><s:property value="#list.username" /></td>
                                    <td></td>
                                    <td></td>
                                    <td></td>
                                </tr>
                         </s:iterator>

Les lignes sont affichées le bon nombre de fois, donc cela parcourt correctement ma liste. Cependant, je ne sais pas comment accéder à la propriété de nom d'utilisateur pour l'afficher. Évidemment, ce que j'ai ci-dessus n'est pas correct ... Des idées?

11
Kevin

Premièrement, dans Struts2 2.1.x, l'attribut id est obsolète. var devrait être utilisé à la place ( ref )

Je pense que le # est mal utilisé là-bas. En outre, "liste" semble un mauvais nom pour ce qui doit être attribué à chaque itération ... Je pense que "utilisateur" est plus approprié.

IIRC, la syntaxe est

 <s:iterator value="users" var="user">
  ...  <s:property value="#user.username" />
 </s:iterator>

De plus, vous n'avez pas besoin d'attribuer l'élément actuel dans l'itérateur pour un cas aussi simple. Cela devrait également fonctionner:

 <s:iterator value="users">
  ...  <s:property value="username" />
 </s:iterator>

Aussi, vous voudrez peut-être essayer ceci:

  <s:iterator value="users">
      ...  <s:property />      <!-- this outputs the full object, may be useful for debugging -->
  </s:iterator>

MISE À JOUR: j'ai corrigé le bit sur le #, c'était ok.

18
leonbloy

Tu peux faire comme ça

<s:iterator value="users" >
<tr>
    <td><s:property value="username" /></td>
    <td></td>
    <td></td>
    <td></td>
</tr>

Remarquez que pas besoin de #list il.

L'autre façon est

<s:iterator value="users" var="user">
<tr>
    <td><s:property value="#user.username" /></td>
    <td></td>
    <td></td>
    <td></td>
</tr>

insetead de id donnez le comme var Comme nous ne spécifions pas de portée pour var, cette nouvelle référence user existe dans la portée par défaut «action» - le ActionContext. Comme vous pouvez le voir, nous faisons référence alors avec l'opérateur #.

3
pavan

Vous pouvez utiliser JSTL avec Struts. Il a une balise <c:forEach> dans sa bibliothèque principale qui vous permettra de parcourir facilement une liste ou toute autre collection.

3
duffymo
<s:iterator value="users" var="eachUser">
<div>
 <s:property value="#eachUser.username">
</div>  
</s:iterator>  

Vérifiez this pour plus d'exemples de ce genre

0
DarkKnightFan