如何在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中一一移动每一行的背景颜色并从前一个颜色中删除颜色