我无法相信Struts 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)}但我没有找到$ {%的正确组合(#字符使用:-)。我还可以使用指向何时使用其中一个的页面链接。
答案 0 :(得分:12)
试试这个:
<s:iterator var="parent" value="parents">
<s:iterator var="child" value="#parent.children">
<s:property value="#child.name"/>
<s:iterator>
<s:iterator>
答案 1 :(得分:4)
它对我有用:
<s:iterator value="parents">
<s:iterator value="children">
<s:property value="name" />
</s:iterator>
</s:iterator>
答案 2 :(得分: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>
以下是在JSP中使用List的bean(XBean):
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,嘿,你完成了。
答案 3 :(得分:0)
对于Struts 2.3.x,您可以使用此示例,摘自http://struts.apache.org/release/2.3.x/docs/iterator-tag-examples.html
在此示例中,“countries”是国家/地区对象的列表,每个对象都有一个名称和一个城市列表。每个城市都有一个名字。
<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包含当前国家/地区,由外部迭代器推送到那里。