我在使嵌套迭代器正常工作方面遇到麻烦。内部迭代器在外部迭代器的第一个循环上工作,然后在外部迭代器的后续循环上失败。

我正在使用Struts2 2.3.16.3。

package actions.test;

public class MainArray
{
  private String mainVal_1="Main Hello";
  private String mainVal_2="Main World";
  private SubArray subArray;

  public SubArray getSubArray() { return subArray; }

  public void setSubArray(SubArray subArray) { this.subArray = subArray; }

  public String getMainVal_1() { return mainVal_1; }

  public String getMainVal_2() { return mainVal_2; }
}




package actions.test;

public class SubArray
{
  private String subVal_1="Sub Hello";
  private String subVal_2="Sub World";

  public String getSubVal_1() { return subVal_1; }

  public String getSubVal_2() { return subVal_2; }
}




package actions.test;

import java.util.ArrayList;
import java.util.List;

import com.opensymphony.xwork2.ActionSupport;

public class TestAction extends ActionSupport
{
  private static final long serialVersionUID = -5466515238282086387L;
  List<MainArray> mainArrayList = new ArrayList();

  public String execute()
  {
    SubArray sub1 = new SubArray();
    SubArray sub2 = new SubArray();
    SubArray sub3 = new SubArray();

    MainArray main1 = new MainArray();
    main1.setSubArray(sub1);

    MainArray main2 = new MainArray();
    main1.setSubArray(sub2);

    MainArray main3 = new MainArray();
    main1.setSubArray(sub3);

    mainArrayList.add(main1);
    mainArrayList.add(main2);
    mainArrayList.add(main3);

    return "success";
  }

  public List<MainArray> getMainArrayList()  { return mainArrayList;}
}


<%@ taglib prefix="s" uri="/struts-tags" %>

<h1>Test</h1>

<s:iterator value="mainArrayList" >
  * <s:property value="mainVal_1"/>,
    <s:property value="mainVal_2"/><br>
    <s:iterator value="subArray">
    ** <s:property value="subVal_1"/>,
       <s:property value="subVal_2"/><br>
    </s:iterator>
</s:iterator>


输出:

Test
* Main Hello, Main World
** Sub Hello, Sub World
* Main Hello, Main World
* Main Hello, Main World


注意,嵌套的迭代器仅在外循环的第一遍工作。我尝试了多种变体,例如将var="main"添加到外部循环中。但是我得到了相同的结果:

<%@ taglib prefix="s" uri="/struts-tags" %>

<h1>Test</h1>

<s:iterator value="mainArrayList" var="main">
  * <s:property value="mainVal_1"/>,
    <s:property value="mainVal_2"/><br>
    <s:iterator value="#main.subArray">
    ** <s:property value="subVal_1"/>,
       <s:property value="subVal_2"/><br>
    </s:iterator>
</s:iterator>


关于如何使这种情况表现出来的任何想法?

最佳答案

您只能在main1上设置子数组(但要设置3次),因此其他2个子集都没有设置子数组,也不会产生输出。

10-07 19:27
查看更多