1

私はそのbookidに基づいて本のリストを取得しているクラスを持っています。

リストを取得するためのコード:
Bookdetails book=new Bookdetails();book = dao.listBookDetailsById(Integer.parseInt(bookid));

IDに基づいて1冊の本を取得した後、その本をリストに挿入し、セッションに入れているのと同じリストをjspページに戻します。

本をリストに挿入するためのコード `

for(int i=1;i<=1;i++)
 {
    book = dao.listBookDetailsById(Integer.parseInt(bookid));    
    books.add(book);
 }
 session.put(BillTransactionBooksConstants.BOK, books );
 lists = (List) session.get( BillTransactionBooksConstants.BOK );
 System.out.println(lists.size()); `

注:ユーザーがjspページの行をクリックするたびに、bookidがアクションクラスに追加されます

しかし、私の問題は次のとおりです。リストに本を追加しようとすると、リストに1冊の本しか追加されません。ユーザーが別のブックIDを渡して配列リストに追加すると、前のブックIDと一緒にリストに挿入されません。私のリストサイズは常に1を示しています。

ユーザーがbookidをアクションクラスに渡すときに、それらの本のIDに基づいてすべての本を配列リストに挿入したいと思います。

この問題を解決するのを手伝ってください。

フルアクションクラスコード:

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

    import javax.servlet.http.HttpServletRequest;

    import org.apache.struts2.ServletActionContext;

    import v.esoft.actions.interceptor.VisionBooksConstants;
    import v.esoft.dao.BookdetailsDAO.BookdetailsDAO;
    import v.esoft.pojos.Bookdetails;

    import com.opensymphony.xwork2.ActionContext;
    import com.opensymphony.xwork2.ActionSupport;

    public class AddBookToSession extends ActionSupport {
         Bookdetails book=new Bookdetails();
            List<Bookdetails> books = new ArrayList<Bookdetails>();
            List<Bookdetails> lists = new ArrayList<Bookdetails>();
            BookdetailsDAO dao = new BookdetailsDAO(); 
    Map session = ActionContext.getContext().getSession();

        @SuppressWarnings("unchecked")
        public String execute()
        { 
            HttpServletRequest request = ServletActionContext.getRequest();


            String bookid = request.getParameter("bid");  


            System.out.println("---------------Bookid-"+bookid);


            for(int i=1;i<=1;i++)
            {
              book = dao.listBookDetailsById(Integer.parseInt(bookid));   
              System.out.println("---------------Bookid-"+book); 
              books.add(book);
            }
                 session.put(BillTransactionBooksConstants.BOK, books );
                 lists = (List) session.get( BillTransactionBooksConstants.BOK );
                  System.out.println(lists.size()); 

            return SUCCESS;
        }

        public Bookdetails getBook() {
            return book;
        }

        public void setBook(Bookdetails book) {
            this.book = book;
        }

        public List<Bookdetails> getBooks() {
            return books;
        }

        public void setBooks(List<Bookdetails> books) {
            this.books = books;
        }

        public List<Bookdetails> getLists() {
            return lists;
        }

        public void setLists(List<Bookdetails> lists) {
            this.lists = lists;
        }   
    }
4

1 に答える 1

2

問題は、セッションからリストをロードしていないため、新しいリクエストがあるたびに新しいリストを作成することです。

編集済み:セッションからリストを初めて読み込もうとすると、そこに注意があるため、ArrayList を作成する必要があります。おそらくいくつかの初期化ルーチンでこれを行うことができますが、次のコードは優れた回避策を示しています。

これを試して:

books = (List) session.get( BillTransactionBooksConstants.BOK );

if ( books == null ) books = new ArrayList<Bookdetails>();

book = dao.listBookDetailsById(Integer.parseInt(bookid));   
books.add(book);
session.put(BillTransactionBooksConstants.BOK, books );

それがうまくいくことを願っています。

于 2012-11-10T07:59:08.737 に答える