i have a grid from where users select the row ,
when a row is clicked then its id is sending to my action class AddBookToSession.java
and after wards it is returning a list into my jsp page invoice.jsp
I am getting error java.util.ConcurrentModificationException
,when users selects a row from my grid.
I read this similar question ,But still i am not able to solve my problem.
My problem is : Why i am getting java.util.ConcurrentModificationException
Error and how can I solve this issue. Please help me to solve this problem.
Error in console:
Dec 10, 2012 11:37:30 PM org.apache.catalina.core.ApplicationDispatcher invoke
SEVERE: Servlet.service() for servlet jsp threw exception
java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:819)
at java.util.ArrayList$Itr.next(ArrayList.java:791)
at org.apache.struts2.components.IteratorComponent.end(IteratorComponent.java:334)
at org.apache.struts2.views.jsp.IteratorTag.doAfterBody(IteratorTag.java:87)
-------------------
------------------
invoice.jsp
<s:if test="#session['BOK'].size() > 0">
<table width="100%" class="userTable" valign="top" border="0">
<s:iterator value="#session.BOK" status="userStatus">
<tr class="<s:if test="%{#userStatus.odd == true}">odd</s:if> <s:else>even</s:else>">
<td width="80%"><s:property value="bookTitile" /></td>
<td align="right" width="20%">
<s:url id="cancelURL" action="RemovebooksFromSession" namespace="/admin/setups/secure/jspHomepage/bookstransaction">
<s:param name="bkid" value="%{id}"></s:param>
</s:url>
<sj:a href="%{cancelURL}" targets="myAdvanceDivBoxx">Rem</sj:a></td>
</tr>
</s:iterator>
</table>
</div>
</s:if>
AddBookToSession.java
public String execute()
{
String bookid = request.getParameter("bid");
String qnty=dao.getquantityById(Integer.parseInt(bookid));
if(qnty.equals("0")||qnty.equals("")||qnty.equals("null")){
return SUCCESS;
}
Bookdetails book = dao.listBookDetailsById(Integer.parseInt(bookid));
books = (ArrayList) session.get(BillTransactionBooksConstants.BOK);
if ( books == null ) books = new ArrayList<Bookdetails>();
boolean already_exists = false;
for ( Bookdetails b : books )
{
if ( Integer.toString(b.getId()).equals(bookid))
{
already_exists = true;
break;
}
}
if (book != null && !already_exists )
{
books.add(book);
System.out.println("books size"+books.size());
session.put(BillTransactionBooksConstants.BOK,books);
}
return SUCCESS;
}