web-dev-qa-db-ja.com

オブジェクトのリストをどのように繰り返しますか?

Stringユーザー名を含むUserクラスがあります。を使用してテーブルに表示しようとしているユーザーのリストがあります

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

行は適切な回数表示されているので、リストを適切に繰り返し処理しています。ただし、usernameプロパティにアクセスして表示する方法がわかりません。明らかに私が上に持っているものは正しくありません...何かアイデアはありますか?

11
Kevin

まず、Struts2 2.1.xでは、id属性が非推奨になり、代わりにvarを使用する必要があります( ref

#はそこで誤用されていると思います。 その上、「リスト」は各反復で割り当てられるものの悪い名前のようです...私は「ユーザー」がより適切だと思います。

IIRC、構文は

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

さらに、このような単純なケースでは、イテレータで現在のアイテムを割り当てる必要はありません。これも機能するはずです:

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

また、これを試してみることもできます。

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

更新:#に関するビットを修正しました。問題ありませんでした。

18
leonbloy

あなたはこのようにすることができます

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

#listが必要ないことに注意してください。

他の方法は

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

idの挿入図varとして指定します。varのスコープを指定しないため、この新しいuser参照はデフォルトの「アクション」スコープであるActionContextに存在します。ご覧のとおり、次に#演算子を使用して参照します。

3
pavan

JSTLはStrutsで使用できます。 <c:forEach>コアライブラリ内のタグ。これにより、リストやその他のコレクションを簡単に繰り返すことができます。

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

このような例については、 this を確認してください

0
DarkKnightFan