如何在arraylist中一一添加对象以制作完整列表

Posted

技术标签:

【中文标题】如何在arraylist中一一添加对象以制作完整列表【英文标题】:how to add object in a arraylist one by one in order to make a complete list 【发布时间】:2012-10-30 11:51:42 【问题描述】:

我有一堂课,我正在根据它的 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 将所有书籍插入到数组列表中。

请帮我解决这个问题。

完整的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;
           
    

【问题讨论】:

【参考方案1】:

问题是您没有从会话中加载列表,因此每次有新请求时您都会创建一个新列表。

已编辑:第一次尝试从会话加载列表时,会注意到那里,因此我们需要创建 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 );

希望它有效。

【讨论】:

请帮助我。我从早上就开始尝试。你为我写的答案并不完全正确。当我的调试器到达`books.add(book);` 时,这段代码会直接转发到return SUCCUSS;。新数据未添加到会话中。

以上是关于如何在arraylist中一一添加对象以制作完整列表的主要内容,如果未能解决你的问题,请参考以下文章

如何在谷歌地图中一一删除标记?

如何在js中一一移动每一行的背景颜色并从前一个颜色中删除颜色

从iPhone的核心数据在tableview中一一添加单行

如何在 Django 中一次将多个对象添加到 ManyToMany 关系?

如何在 Swift 中一一显示 UITextField?

如何在本机反应中一一显示数组中的元素