2010-02-24 96 views
8

我怎麼也不敢相信這東西簡單似乎可以這麼辛苦在Struts中2Struts 2個的嵌套迭代器

做這大約是我想怎麼辦,因爲它會用Java來完成。

for (Parent parent : parents){ 
    for (Child child: parent.getChildren()){ 
    System.out.println(child.getName()); 
    } 
} 

這應該轉化爲在Stuts標籤接近這個東西:

<s:iterator var="parent" value="parents"> 
    <s:iterator var="child" value="parent.children"> 
    <s:property value="child.name"/> 
    <s:iterator> 
<s:iterator> 

我認爲parent.children應該像$ {%(#parent.children)},但我有找不到$ {%(#使用的字符:-)的正確組合。我也可以使用鏈接到頁面解釋何時使用哪一個。

回答

11

試試這個:

<s:iterator var="parent" value="parents"> 
    <s:iterator var="child" value="#parent.children"> 
     <s:property value="#child.name"/> 
    <s:iterator> 
<s:iterator> 
+0

工作。謝謝。 – Bloodboiler 2010-03-09 15:41:00

+0

有人可以解釋#號的含義嗎?我犯了與原始海報相同的錯誤。謝謝! – Jim 2012-01-02 07:51:06

+1

本頁解釋它:http://struts.apache.org/2.x/docs/ognl.html – Nate 2012-01-03 18:18:29

4

它爲我的作品:

<s:iterator value="parents"> 
    <s:iterator value="children"> 
     <s:property value="name" /> 
    </s:iterator> 
</s:iterator> 
+1

比接受的答案更優雅!這是有效的,因爲ieration中的當前項會被推到堆棧頂部,所以不需要用戶var =「xxxx」來訪問它。 – user1884155 2014-10-17 13:01:02

1

這是JSP代碼將如何看起來像:

<s:form action="saveaction" > 
     <s:iterator value="lstBean" id="lstBean" status="outerStat"> 
      <s:textfield value="%{name}" name="lstBean[%{#outerStat.index}].name"/> 
      <s:textfield value="%{amt}" name="lstBean[%{#outerStat.index}].amt"/> 
      <s:textfield value="%{id}" name="lstBean[%{#outerStat.index}].id"/> 
      <s:iterator value="%{lstString}" status="myStat"> 
       <s:textfield name="lstBean[%{#outerStat.index}].lstString[%{#myStat.index}]"/> 
      </s:iterator> 
     </s:iterator> 
     <s:submit value="Click me to submit lstBean"/> 
    </s:form> 

以下是豆(XBean)其列表在JSP中使用:

public class XBean 
{  
private ArrayList<String> lstString=new ArrayList<String>(); 
private String name; 
private Double amt; 
private Integer id; 
//Getters and setters of fields 
} 

現在你可以簡單地在你的提交動作(saveaction)中擁有一個帶setter的字段lstBean,並且你已經完成了。

+1

所以你的意思是在內部迭代中,我也可以訪問外部迭代部分的值?大..... – FaithReaper 2015-10-29 22:33:46

0

對於Struts的2.3.x版本,你可以用這個例子,從http://struts.apache.org/release/2.3.x/docs/iterator-tag-examples.html

在這個例子中提取,「國家」是國家對象,每個對象都有一個名字和城市的名單列表。每個城市都有一個名字。

<s:iterator value="countries"> 
    <s:iterator value="cities"> 
     <s:property value="name"/>, <s:property value="[1].name"/><br> 
    </s:iterator> 
</s:iterator> 

它們指向棧上的特定位置:'[1]'。位置0的堆棧頂部包含當前城市,由內部迭代器推送;位置1包含當前的國家,由外部迭代器推送到那裏。