使用Struts 2迭代器标记访问ArrayList数组

时间:2012-02-14 12:15:38

标签: struts2

我怀疑使用iterator标签访问jsp中的arraylist数组。

在我的动作类中,我使用了以下代码..,

ArrayList[] arr= new ArrayList[10]; 

for(int i = 0; i < 10; i++) { 
    arr[i] = new ArrayList<bean>();
} 

while (some conditions) { 
    arr[i].add(new bean(some values)); 
    i++; 
}

我的问题是..如何在迭代器中访问arr [0],arr [1] ... arr [n] arraylists ..?

以下代码工作正常..但请改进它以实现我的结果..!

<s:iterator value="display.arr[0]">
  ...
</s:iterator>

帮助将受到赞赏..!

1 个答案:

答案 0 :(得分:0)

我想知道你是否多看了iterator tag documention;至少有3-4种方法可以做到这一点,包括使用"begin" / "end"属性使用立即的索引列表,使用"var"来保存外部项目(不是严格必要,但IMO更具沟通性等等。

假设bean类中名为"s"的属性,我称之为SomeBean

<s:iterator value="displays" var="display">
  <s:iterator value="#display">
    ${s}<br/>
  </s:iterator>
</s:iterator>

使用底部的Java代码,会产生以下输出:

Outer: 0, Inner: 0
Outer: 0, Inner: 1
Outer: 0, Inner: 2
Outer: 1, Inner: 0
Outer: 1, Inner: 1
Outer: 1, Inner: 2
Outer: 2, Inner: 0
Outer: 2, Inner: 1
Outer: 2, Inner: 2

推动此代码的完整操作;我每次只返回一个新列表作为例子:

public class NestedListsAction extends ActionSupport {

    public List<List<SomeBean>> getDisplays() {
        List<List<SomeBean>> displays = new ArrayList<List<SomeBean>>();

        for (int i = 0; i < 3; i++) {
            List<SomeBean> innerList = new ArrayList<SomeBean>();
            for (int j = 0; j < 3; j++) {
                innerList.add(new SomeBean(String.format("Outer: %d, Inner: %d", i, j)));
            }
            displays.add(innerList);
        }

        return displays;
    }

    private class SomeBean {
        private String s;

        public SomeBean(String s) {
            this.s = s;
        }

        public String getS() {
            return s;
        }
    }

}

请注意SO policy on accepting answers。通常情况下我不会把它带给一个新用户,但IMO我花了更多精力来回答这个问题而不是你研究它,这让我很沮丧。