Как вы перебираете список объектов? - PullRequest
11 голосов
/ 03 мая 2010

У меня есть класс User, в котором есть имя пользователя String. У меня есть список пользователей, которые я пытаюсь отобразить в таблице, используя

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

Строки отображаются правильное количество раз, так что он перебирает мой список правильно. Однако я не знаю, как получить доступ к свойству username для его отображения. Очевидно, что то, что я имею выше, не правильно ... Есть идеи?

Ответы [ 5 ]

18 голосов
/ 03 мая 2010

Во-первых, в 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>

ОБНОВЛЕНИЕ: Я исправил бит о #, все было в порядке.

3 голосов
/ 18 июля 2011

Вы можете сделать это

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

Обратите внимание, что # список там не нужен.

Другой способ -

<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 голосов
/ 03 мая 2010

Вы можете использовать JSTL со Struts. В его основной библиотеке есть тег <c:forEach>, который позволит вам легко перебирать список или любую другую коллекцию.

0 голосов
/ 02 июля 2013
<s:iterator value="users" var="eachUser">
<div>
 <s:property value="#eachUser.username">
</div>  
</s:iterator>  

Проверьте this , чтобы узнать больше примеров

0 голосов
/ 03 мая 2010

Struts 1.x позаботится о ваших внутренних свойствах.

</ logic: iterate>

Полагаю, в соответствии с твоим примером у тебя может быть Вам может не понадобиться "#list". снова в атрибуте значения </ s: итератор>

...