Struts2 Итерация ArrayList с JavaBean - PullRequest
0 голосов
/ 21 декабря 2011

Этот вопрос может задаваться в нескольких потоках ... но не может быть точным правильным ответом

Java Bean

package com.example;

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

Создание ArrayList JavaBean, как показано ниже

    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;
      }
   }

класс действий

пакет 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";
            }
        }
    }

Jsp с тегом итератора Struts2

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

Вопрос, почему ArrayList из Bucket, содержащий JavaBean, не отображается при повторении ...

Я делаю что-то неправильно ???

относительно карт

1 Ответ

1 голос
/ 21 декабря 2011

В зависимости от вашей версии, вы должны либо предоставить геттер для docsmx (предпочтительно, до S2.1.mumble), либо сделать docsmx общедоступным (не так, как S2.1 +).

Или, в зависимости от вашего кода, используйте правильный метод получения:

<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";
}

Это позволяет более естественное чтение, делает более ясным, каковы два состояния (успех и неудача), сохраняет их очень четкими и немного короче.

...