2012-11-10 3 views
1

나는 bookid를 기반으로하는 책리스트를 얻고있다. 에 geting 목록arraylist에 하나씩 오브젝트를 추가하여 완전한리스트를 만드는 방법

코드 :
Bookdetails book=new Bookdetails();book = dao.listBookDetailsById(Integer.parseInt(bookid));

의 ID를 기반으로 한 책에 geting 후, 나는 목록과 동일한 목록 내가 세션에서 퍼팅 내 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 개만 추가됩니다. 사용자가 arraylist에 추가 할 다른 책 ID를 전달하면 이전 책과 함께 목록에 삽입하지 않습니다. 내 목록 크기가 항상 1로 표시됩니다.

사용자가 bookid를 내 액션 수업에 전달할 때 해당 책의 ID를 기반으로 모든 책을 arraylist에 삽입하고 싶습니다.

이 문제를 해결하는 데 도움을주십시오.

전체 Action 클래스 코드 :

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

답변

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

가 작동 바랍니다.

+0

여전히 문제가 있습니다. –

+0

도와주세요. 나는 아침부터 그것을 시도하고있다. 네가 나를 위해 대답을 쓴 것은 완전히 옳지 않다. 내 debbuger가'books.add (book);에 도달하면이 코드는'dlctly return SUCCUSS; '에 전달됩니다. 새 데이터가 세션에 추가되지 않습니다. –

관련 문제