【发布时间】:2012-10-30 16:59:04
【问题描述】:
我正在尝试将一个对象添加到会话中存储的 ArrayList 中。
对象似乎没有被添加。
请检查我下面的代码,并为此建议我一个正确的答案。
在调试时,我的调试器会一直运行到此代码 books.add(book);,然后它会跳过剩余的代码。我知道问题出在books.add(book); 。书籍详情未添加到我的数组列表中books。
AddBookToSession.java
public class AddBookToSession extends ActionSupport {
Bookdetails book=new Bookdetails();
List<Bookdetails> books = new ArrayList<Bookdetails>();
BookdetailsDAO dao = new BookdetailsDAO();
Map session = ActionContext.getContext().getSession();
public String execute()
{
HttpServletRequest request = ServletActionContext.getRequest();
String bookid = request.getParameter("bid");
books = (List) session.get( BillTransactionBooksConstants.BOK );
for(int i=1;i<=1;i++)
{
book = dao.listBookDetailsById(Integer.parseInt(bookid));
books.add(book); //problem is here obj book is not adding into books list
books = new ArrayList<Bookdetails>();
System.out.println("---------------Bookid-"+book);
}
....................
...............
struts.xml
<package name="testwithrowselect" extends="struts-default" >
<action name="InsertbooksToSession" class="v.esoft.actions.booktransaction.AddBookToSession">
<result name="success">/jspHomepage/bookstransaction/shortBill.jsp</result>
</action>
</package>
【问题讨论】:
-
看起来错误在下一行:
books = new ArrayList<Bookdetails>();。 -
另外,这两行没有意义:
session.put(BillTransactionBooksConstants.BOK, books ); books = (List) session.get( BillTransactionBooksConstants.BOK );。您创建一个新的List<Bookdetails>,将其保存在会话中并检索它。您如何期望仍然拥有第一个列表? -
@LuiggiMendoza 有了这两行,我将列表添加到我的会话中以创建客户账单.. 此链接中的更多详细信息 (stackoverflow.com/questions/13320293/…)
-
虽然这个问题与 struts 2 无关,但请花一些时间来了解使用框架的更好方法。
-
@AshutoshSingh 您不需要将列表添加回会话,因为如果您更新其中一个对象(包含列表和列表的会话属性)都指向相同的内存位置他们另一个同时更新。
标签: java list struts2 arraylist