2

我是 struts 2 的新手,并且对使用迭代器标记在我的 JSP 中迭代集合的集合失去了理智。

我的动作类公开了一个列表(父级),其中又包含 4 个列表(子级)。每个子列表包含 5 个域对象 ( e.g. User)。

在我的 JSP 中,我需要在遍历集合后显示 User.Name。我能够遍历父集合,但无法访问子列表。它们是匿名列表,不以特定名称公开(即,getter 不可用)。

    <s:iterator value="usrList" var="refParent">
    <ul>
        <s:iterator value="#refParent.columns" var="usr">
        <li>
            <s:property value="#usr.Name"/>
        </li>
        </s:iterator>   
    </ul>
</s:iterator>

外部迭代器产生 4 个<ul>标签,但每个标签都是空的,即不<li>显示任何标签。

我看到的所有示例都在访问特定的命名集合(例如User.PhoneList),但它们似乎都没有表现出这种特殊行为。

任何帮助是极大的赞赏

4

3 回答 3

1

我想我终于从一个 Iterator-tag 示例中弄清楚了(感谢 Umesh 和 Quaternion)。我完全错过了那个,也没有使用top.

   <s:iterator value="usrList">
     <ul>
        <s:iterator value="top">
         <li>
            <s:property value="Name"/>
         </li>
        </s:iterator>   
    </ul>
  </s:iterator>
于 2012-10-30T17:31:32.497 回答
0

Struts2 Iterator 标记足够简单并且工作方式非常简单。因此,如果您有 Collection 的 Collection 或任何结构认为您将如何在简单的 Java 应用程序中迭代它们,同样适用于 S2 迭代器标记,但同时它会给你更多的灵活性以及配置。

简而言之,您需要嵌套的迭代器标记。当 S2 迭代器标记迭代对象时,它会将当前对象放在值堆栈的顶部,您可以轻松地在 JSP 代码中访问该标记。

由于在您的代码中顶级对象将是一个集合,您需要再次迭代它

<s:iterator value="firstCollection">
 <s:iterator value="firstCollection>
    / do what you want here
  </iterator>

由于迭代对象将位于堆栈顶部,因此您可以直接引用该标记而无需任何引用。

我建议你看看以下官方文件

  1. 迭代器
  2. 迭代器标签示例
于 2012-10-29T05:49:13.490 回答
0

请从此链接尝试此示例

<table>
<s:iterator value="allCities" id="cities">
    <s:iterator value="#city.phoneNumbers" id="number">
    <tr>
        <td>
        <!-- Accessing the city name through the city variable -->
            <s:property value="#city.name" />
        </td>
        <td>
            <!-- Accessing the objects inside the phone number object through the number variable -->
            <s:property value="#number.prefix" />
        </td>
        <td>
            <s:property value="#number.rate" />
        </td>
    </tr>
    </s:iterator>
</s:iterator>
</table>
于 2012-10-29T04:19:06.063 回答