javax.servlet.ServletException: #{MapDisplay.add}: javax.faces.el.EvaluationException: java.util.ConcurrentModificationException
javax.faces.webapp.FacesServlet.service(FacesServlet.java:209)

解决方案 »

  1.   

    和jsf没关系,具我推断,你应该是在遍历Map的时候向里面增加对象了。这样做是不对的。我猜的对吧?
      

  2.   

    可能是el出了问题,#{MapDisplay.add}中的bean应为小写的mapDisplay.
      

  3.   

    to funcreal(生命在于移动) :
    你猜得没错,那么有没有解决办法呢?
      

  4.   

    我的代码如下,我的目的是通过触发add事件把sourceitems的数据添加到listitems上面并显示出来
    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);
    }
    }
      

  5.   

    MapBean mapitem = (MapBean)itemIter.next();
    if(mapitem.getSelect()){
      sourceitems.remove(mapitem);
      listitems.add(mapitem);
    }
    你的意图似乎是遍历一个集合,如果某一项符合一个条件,就从这个集合删除,并加入到另外一个集合中。
    可以借助第三个集合吧应该。自己动动脑子,我也再想想。另外你遍历集合的写法不是很好。应该这样写:
    for(Iterator iter=list.iterator();iter.hasNext();){
        String s = (String)iter.next();
    }
    这样写不仅仅是写法的不同,这样写缩小了变量iter的作用域,是良好的编程习惯。