javax.servlet.ServletException: #{MapDisplay.add}: javax.faces.el.EvaluationException: java.util.ConcurrentModificationException
javax.faces.webapp.FacesServlet.service(FacesServlet.java:209)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:209)
你猜得没错,那么有没有解决办法呢?
public class mapDisplay {
private List listitems = new ArrayList();
private List sourceitems = new ArrayList();
public mapDisplay(){
listitems.add(new MapBean("测试1"));
listitems.add(new MapBean("测试2"));
listitems.add(new MapBean("测试3"));
listitems.add(new MapBean("测试4"));
sourceitems.add(new MapBean("测试5"));
sourceitems.add(new MapBean("测试6"));
sourceitems.add(new MapBean("测试7"));
sourceitems.add(new MapBean("测试8"));
}
public List getListitems(){
return listitems;
}
public List getSourceitems(){
return sourceitems;
}
public void setListitems(List termOptions) {
this.listitems = termOptions;
}
public void setSourceitems(List termOptions) {
this.sourceitems = termOptions;
}
public String add(){//增加
Iterator itemIter = sourceitems.iterator();
while(itemIter.hasNext()){
MapBean mapitem = (MapBean)itemIter.next();
if(mapitem.getSelect()){
sourceitems.remove(mapitem);
listitems.add(mapitem);
}
}
return "";
}
public String addAll(){//增加所有
Iterator itemIter = sourceitems.iterator();
while(itemIter.hasNext()){
MapBean mapitem = (MapBean)itemIter.next();
sourceitems.remove(mapitem);
listitems.add(mapitem);
}
return "";
}
public void remove(){//删除
FacesContext facesContext = FacesContext.getCurrentInstance();
UIViewRoot root = facesContext.getViewRoot();
UIData table = (UIData)root.findComponent("MapForm").findComponent("table");
MapBean item = (MapBean) table.getRowData();
listitems.remove(item);
sourceitems.add(item);
}
}
if(mapitem.getSelect()){
sourceitems.remove(mapitem);
listitems.add(mapitem);
}
你的意图似乎是遍历一个集合,如果某一项符合一个条件,就从这个集合删除,并加入到另外一个集合中。
可以借助第三个集合吧应该。自己动动脑子,我也再想想。另外你遍历集合的写法不是很好。应该这样写:
for(Iterator iter=list.iterator();iter.hasNext();){
String s = (String)iter.next();
}
这样写不仅仅是写法的不同,这样写缩小了变量iter的作用域,是良好的编程习惯。