2012-10-29 35 views
2

我是struts 2的新手,並且在使用迭代器標籤在我的JSP中迭代集合集合時失去了主意。struts2迭代器標籤 - 遍歷集合集合

我的動作類公開了一個List(父),它又包含4個列表(子)。每個子列表包含5個域對象(e.g. User)。

在我的JSP中,我需要在迭代集合之後顯示User.Name。我能夠遍歷父集合,但無法訪問子列表。它們是匿名列表,不會以特定名稱公開(即,吸氣劑不可用)。

<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),但它們都沒有顯示出這種特定行爲。

任何幫助是極大的讚賞

+0

你是什麼意思,他們是「匿名列表」?你如何訪問Java中的列表?這在JSP中是一樣的。 –

+0

你嘗試過「#usr.name」嗎?我很少需要var屬性。你應該能夠移除外部迭代器上的var,內部使用「columns」作爲值,你也可以把var放在內部迭代器中,並且在屬性中簡單地使用「name」,或者如果它是類似於內置類型列表,然後使用空屬性標記(它將使用堆棧頂部的內容)。 – Quaternion

+0

@Dave:通過匿名列表,我的意思是我的第二個集合不是一個命名的屬性。我的結構基本上是一個List1(父),它包含4個List(List2),它們使用'add'方法添加到List1,然後List2集合包含我想要在JSP中訪問的域對象。 – user1781912

回答

0

請嘗試從this link

這個例子
<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> 
0

Struts2的iterator標籤在一個非常簡單的manner.So夠簡單的工作,如果你有收藏或收藏以往的結構認爲如何在簡單的Java應用程序中迭代它們,這同樣適用於S2迭代器標籤,但同時它還會爲您提供更多的靈活性以及配置。

簡而言之,您需要嵌套的迭代器標籤。當S2迭代器標籤迭代對象時,它會將當前對象放置在值棧頂部,並且您可以在JSP代碼中輕鬆訪問該標籤。

因爲在代碼頂級對象將是你需要的是再次重複像

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

由於在迭代對象將是在棧可以參考這個標籤直接沒有任何參考的頂部集合。

我建議你在下列正式文件

有看
  1. iterator
  2. iterator-tag-examples
1

我想我終於想通了從迭代器標籤的例子之一(感謝Umesh和Quaternion)。我完全錯過了那個,並沒有通讀使用top的整個例子。

<s:iterator value="usrList"> 
    <ul> 
     <s:iterator value="top"> 
     <li> 
      <s:property value="Name"/> 
     </li> 
     </s:iterator> 
    </ul> 
    </s:iterator>