Struts2使用JavaBean迭代ArrayList

时间:2011-12-21 19:30:09

标签: struts2 arraylist iteration

可能会在多个主题中询问此问题......但无法正确回答

Java Bean

package com.example;

public class Document {
  private String name;
  public String getName() {
     return name;
  }
  public void setName(String name) {
    this.name = name;
  } 
}

如下所示的JavaBean的ArrayList创建

    package com.example;
    import java.util.ArrayList;
    public class classdocs {

     public ArrayList getData() {
       ArrayList docsmx = new ArrayList();
       Document d1 = new Document();
       d1.setName("user.doc");
       Document d2 = new Document();
       d2.setName("office.doc");
       Document d3 = new Document();
       d3.setName("transactions.doc");
       docsmx.add(d1);
       docsmx.add(d2);
       docsmx.add(d3);
       return docsmx;
      }
   }

行动类

package com.example;     import java.util.ArrayList;

import com.opensymphony.xwork2.ActionSupport;

public class FetchAction extends ActionSupport {
        private String username;
        private String message;
        private ArrayList docsmx = new ArrayList();

        public ArrayList getDocuments() {
            return docsmx;
        }

        public String getMessage() {
            return message;
        }
        public void setMessage(String message) {
            this.message = message;
        }
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }

        public String execute() {
            classdocs  cx = new classdocs();

            if( username != null) {         
                docsmx = cx.getData();  
                return "success";
            } else {
                message="Unable to fetch";
                return "failure";
            }
        }
    }

使用Struts2 Iterator标记的Jsp

Documents uploaded by the user are:</br>
<s:iterator value="docsmx">     
<s:property value="name" /></br>
</s:iterator>

问题为什么迭代时不显示包含JavaBean的Bucket的ArrayList ...

我做错了什么?

问候 KARTHIK

1 个答案:

答案 0 :(得分:1)

根据您的版本,您应该为docsmx(首选,pre-S2.1.mumble)提供getter,或者将docsmx公开(不是首选,S2.1 +)。

或者,根据您的代码,使用正确的getter:

<s:iterator value="documents">     
  <s:property value="name" /></br>
</s:iterator>

一些注意事项:documents应该被宣布为List,而不是ArrayList,尽管在这种情况下几乎肯定无关紧要。但是,当实现无关紧要时,接受编码到接口是个好习惯。

我还考虑稍微收紧一下代码:

public String execute() {
    if (username == null) {
        message = "Unable to fetch";
        return "failure";
    }

    docsmx = cs.getData();            
    return "success";
}

这允许更自然的阅读,使两个状态(成功和失败)更清晰,使它们保持非常独特,并且稍微缩短。