【问题标题】:java.util.ConcurrentModificationException when creating h:selectOneMenu创建 h:selectOneMenu 时出现 java.util.ConcurrentModificationException
【发布时间】:2014-12-13 02:37:53
【问题描述】:

我正在尝试创建一个 h:selectOneMenu

我收到了许多错误,但最新的一个在主题行中。我已经为此工作了一段时间,但我无法让它发挥作用。

请帮忙

JPA:

package com.homework.jpa

import java.io.Serializable;
import javax.persistence.*;
import java.math.BigDecimal;
import java.util.List;


/**
 * The persistent class for the GRIDMASTER database table.
 * 
 */
@Entity
@NamedQuery(name="Gridmaster.findAll", query="SELECT g FROM Gridmaster g")
public class Gridmaster implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    private long gridid;

    @Column(name="\"PROGRAM\"")
    private String program;

    public Gridmaster() {
    }

    public long getGridid() {
        return this.gridid;
    }

    public void setGridid(long gridid) {
        this.gridid = gridid;
    }


    public String getProgram() {
        return this.program;
    }

    public void setProgram(String program) {
        this.program = program;
    }
}

EJB:

import com.homework.jpa.*;

import java.util.List;

@Stateless
public class GridMasterBean {

    @PersistenceContext
    private EntityManager em;

        public List<Gridmaster> getDisplayGridList() {
            return em.createQuery("FROM Gridmaster m", Gridmaster.class).getResultList();
}

支持 bean:

@ManagedBean
public class gridMaster_backing {
    private static final String String = null;
    @EJB
    private GridMasterBean ejb;
    private List gridList = new ArrayList();    
    public String pickedGrid;

    public String getPickedGrid() {
        return pickedGrid;
    }

    public void setPickedgrid(String pickedGrid) {
        this.pickedGrid = pickedGrid;
    }

    public void setGridList(List gridList) {
        this.gridList = gridList;
    }

    public List getGridList() {
        // produces List of Grids
        gridList.clear();
        List gridList = ejb.getDisplayGridList();
            Iterator it  = gridList.iterator();
            while(it.hasNext()){
                 Gridmaster programCodes  = (Gridmaster)it.next();
                 SelectItem sItem = new SelectItem();
                 //Long GridId = Gridmaster.getGridid();

                 //String progName = programCodes.getDescription() + " -- " + programCodes.getProgramCode();
                 sItem.setLabel(program);
                 sItem.setValue(gridid);
                 gridList.add(sItem);
             }          
        return gridList; 
        }
    }

xhtml:

<h:selectOneMenu value="#{gridMaster_backing.pickedGrid}">
            <f:selectItems value="#{gridMaster_backing.gridList}" />

        </h:selectOneMenu>

【问题讨论】:

    标签: java jsf-2 ejb


    【解决方案1】:

    问题是gridList.add(sItem)。您正在尝试在迭代列表时添加到列表中。而是使用索引迭代列表。然后在索引处添加。请务必在添加 at index 时相应地更新迭代器变量。

    【讨论】:

    • 谢谢丹,但我没有听从你的建议...我不知道我应该如何用索引来改变它。你能举个例子吗?
    • 你想做什么。看起来您正在创建一个 gridList=ejb.getDisplayGridList()。然后你是该列表的迭代器并添加到同一个列表中。这是你的意图吗?
    • 我正在尝试创建一个包含表中所有程序代码的下拉列表
    • 我认为我需要通过结果列表进行整合才能做到这一点。感谢您提供的任何帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-27
    • 2013-08-16
    • 2019-11-27
    • 2019-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多