Struts 2嵌套迭代器

时间:2010-02-24 16:07:38

标签: jsp struts2 iterator nested ognl

我无法相信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)}但我没有找到$ {%的正确组合(#字符使用:-)。我还可以使用指向何时使用其中一个的页面链接。

4 个答案:

答案 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包含当前国家/地区,由外部迭代器推送到那里。