1

我有一堂课,我正在根据它的 bookid 获取书单。

获取列表的代码:
Bookdetails book=new Bookdetails();book = dao.listBookDetailsById(Integer.parseInt(bookid));

在根据其 Id 获得一本书后,我将该书插入到一个列表中,并且我正在将其放入会话中并将其返回到我的 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 以添加到 arraylist 时,它不会与前一个一起插入到列表中。我的列表大小始终显示为 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 回答