jsf中ArrayList的奇怪行为

jsf中ArrayList的奇怪行为,jsf,primefaces,arraylist,Jsf,Primefaces,Arraylist,我正在使用jsf开发web应用程序。我尝试在ArrayList“materialsSummaryBean.电解材料列表”中显示索引为0的元素的属性“brandName”,并使用“c:forEach”为所有元素显示此属性 对于列表中的所有元素: ЗШБ класс 4 ЗШБ класс 4 КПД-400И

我正在使用jsf开发web应用程序。我尝试在ArrayList“materialsSummaryBean.电解材料列表”中显示索引为0的元素的属性“brandName”,并使用“c:forEach”为所有元素显示此属性

对于列表中的所有元素:

                        ЗШБ класс 4
                        ЗШБ класс 4
                        КПД-400И
                        ЗШБ класс 4
                        ШБ-5
                        МШ-39
                        ЗШБ класс 4

                        <hr />

                        ЗШБ класс 4
                        ЗШБ класс 4
                        МШ-39
                        КПД-400И
                        ЗШБ класс 4
                        ШБ-5
                        МШ-39

                        <hr />

                        МШ-39
                        КПД-400И
                        ЗШБ класс 4
                        КПД-400И
                        ЗШБ класс 4
                        ШБ-5
                        МШ-39

                        <hr />

                        ШБ-5
                        ЗШБ класс 4
                        МШ-39
                        МШ-39
                        ШБ-5
                        КПД-400И
                        МШ-39

                        <hr />
<代码>ББПаС4 ЗШБ класс 4 КПД-400И ЗШБ класс 4 ШБ-5 МШ-39 ЗШБ класс 4
ЗШБ класс 4 ЗШБ класс 4 МШ-39 КПД-400И ЗШБ класс 4 ШБ-5 МШ-39
МШ-39 КПД-400И ЗШБ класс 4 КПД-400И ЗШБ класс 4 ШБ-5 МШ-39
ШБ-5 ЗШБ класс 4 МШ-39 МШ-39 ШБ-5 КПД-400И МШ-39
我不知道这是什么问题

MaterialsSummaryBean方法“Get电解材料分配列表”:

public List getElectronicerMaterialAllotList(){
MaterialAllotFilter MaterialAllotFilter=新MaterialAllotFilter();
材料过滤器。设置电解序号(id);
返回materialService.GetMaterialAllotByElectronicsERID(MaterialAllotFilter);
}
和“GetMaterialAllocateByElectronicserid”方法:

公共列表GetMaterialAllotByElectronicsERID(MaterialAllotFilter MaterialAllotFilter){
Long电解serid=materialAllotFilter.get电解serid();
if(serid==null){
抛出新的IllegalArgumentException(“电解槽id不能为null”);
}
TypedQuery queryUnit=em.createQuery(
“从单元u中选择u,其中u.electronicer.id=:selectedelectropolyser”,
单位(班)
.setParameter(“selectedElectrolyser”,Electronicserid);
List unitList=queryUnit.getResultList();
HashSet MaterialAllotList=新HashSet();
HashMap MaterialAllotusageMap=新HashMap();
用于(单位:单位列表){
MaterialAllot CurrentMaterialAllot=unit.getMaterialAllot();
如果(CurrentMaterialAllot==null)继续;
物料分配列表。添加(当前物料分配);
双重用法=unit.getActualMaterial().getAmount();
如果(!materialAllotusageMap.containsKey(currentMaterialAllot.getId())){
MaterialAllotusageMap.put(CurrentMaterialAllot.getId(),(用法==null)?0:用法;
}否则{
如果(用法==null)继续;
Double-currentUsage=materialAllotusageMap.get(currentMaterialAllot.getId());
MaterialAllotuseMap.put(currentMaterialAllot.getId(),currentUsage+usage);
}
}
列表结果=mapper.createList(MaterialAllotList,MaterialAllotData.class);
材料汇总数据汇总数据;
ArrayList summaries=新的ArrayList();
对于(材料分配数据材料分配:结果){
if(materialAllotusageMap.containsKey(materialAllot.getId()){
summaryData=新材料summaryData();
setId(materialAllot.getId());
summaryData.setAcceptanceDate(materialAllot.getAcceptanceDate());
setLotNumber(materialAllot.getLotNumber());
summaryData.setMaterial(materialAllot.getActualMaterial());
setNumber(materialAllot.getNumber());
summaryData.setManufacturer(materialAllot.getManufacturer());
双重用法=materialAllotusageMap.get(materialAllot.getId());
summaryData.setUsage(用法);
摘要。添加(摘要数据);
materialAllotusageMap.remove(materialAllot.getId());
}
}
返回摘要;
}

服务方法被称为
电解材料分配列表
的每次访问,以及通过访问数据库并再次执行相同操作(即使是单个项目访问)而准备的列表。你应该避免这样做。基本上,您可以在getter方法中使用null检查

public List<MaterialLotSummaryData> getElectrolyserMaterialLotList() {
    if(electrolyserMaterialLotList == null)
    {
          MaterialLotFilter materialLotFilter = new MaterialLotFilter();
          materialLotFilter.setElectrolyserId(id);
         electrolyserMaterialLotList  = materialService.getMaterialLotByElectrolyserId(materialLotFilter);
    }
     return electrolyserMaterialLotList;
}
public List getElectronicerMaterialAllotList(){
if(分配列表==null)
{
MaterialAllotFilter MaterialAllotFilter=新MaterialAllotFilter();
材料过滤器。设置电解序号(id);
电解槽材料分配列表=材料服务。GetMaterialAllotBy电解槽ID(材料分配过滤器);
}
返回原材料分配清单;
}

向我们展示bean代码。否则这只是一个猜测。基本上,OP应该尽可能避免懒惰的人。最好将初始化移动到(后)构造函数方法/操作(侦听器)方法。
                        ЗШБ класс 4
                        ЗШБ класс 4
                        КПД-400И
                        ЗШБ класс 4
                        ШБ-5
                        МШ-39
                        ЗШБ класс 4

                        <hr />

                        ЗШБ класс 4
                        ЗШБ класс 4
                        МШ-39
                        КПД-400И
                        ЗШБ класс 4
                        ШБ-5
                        МШ-39

                        <hr />

                        МШ-39
                        КПД-400И
                        ЗШБ класс 4
                        КПД-400И
                        ЗШБ класс 4
                        ШБ-5
                        МШ-39

                        <hr />

                        ШБ-5
                        ЗШБ класс 4
                        МШ-39
                        МШ-39
                        ШБ-5
                        КПД-400И
                        МШ-39

                        <hr />
public List<MaterialLotSummaryData> getElectrolyserMaterialLotList() {
    MaterialLotFilter materialLotFilter = new MaterialLotFilter();
    materialLotFilter.setElectrolyserId(id);
    return materialService.getMaterialLotByElectrolyserId(materialLotFilter);
}
public List<MaterialLotSummaryData> getMaterialLotByElectrolyserId(MaterialLotFilter materialLotFilter) {
    Long electrolyserId = materialLotFilter.getElectrolyserId();
    if (electrolyserId == null) {
        throw new IllegalArgumentException("Electrolyser id cannot be null.");
    }

    TypedQuery<Unit> queryUnit = em.createQuery(
            "select u from Unit u where u.electrolyser.id = :selectedElectrolyser", 
            Unit.class)
            .setParameter("selectedElectrolyser", electrolyserId);


    List<Unit> unitList = queryUnit.getResultList();
    HashSet<MaterialLot> materialLotList = new HashSet<MaterialLot>();

    HashMap<Long, Double> materialLotUsageMap = new HashMap<Long, Double>();

    for (Unit unit : unitList) {
        MaterialLot currentMaterialLot = unit.getMaterialLot();

        if (currentMaterialLot == null) continue;

        materialLotList.add(currentMaterialLot);


        Double usage = unit.getActualMaterial().getAmount();
        if (!materialLotUsageMap.containsKey(currentMaterialLot.getId())) {
            materialLotUsageMap.put(currentMaterialLot.getId(), (usage == null) ? 0 : usage);
        } else {
            if(usage == null) continue;
            Double currentUsage = materialLotUsageMap.get(currentMaterialLot.getId());
            materialLotUsageMap.put(currentMaterialLot.getId(), currentUsage + usage);
        }
    }

    List<MaterialLotData> result = mapper.createList(materialLotList, MaterialLotData.class);

    MaterialLotSummaryData summaryData;
    ArrayList<MaterialLotSummaryData> summaries = new ArrayList<MaterialLotSummaryData>();
    for (MaterialLotData materialLot : result) {
        if (materialLotUsageMap.containsKey(materialLot.getId())) {
            summaryData = new MaterialLotSummaryData();
            summaryData.setId(materialLot.getId());
            summaryData.setAcceptanceDate(materialLot.getAcceptanceDate());
            summaryData.setLotNumber(materialLot.getLotNumber());
            summaryData.setMaterial(materialLot.getActualMaterial());
            summaryData.setNumber(materialLot.getNumber());
            summaryData.setManufacturer(materialLot.getManufacturer());

            Double usage = materialLotUsageMap.get(materialLot.getId());
            summaryData.setUsage(usage);
            summaries.add(summaryData);

            materialLotUsageMap.remove(materialLot.getId());
        }
    }

    return summaries;
}
public List<MaterialLotSummaryData> getElectrolyserMaterialLotList() {
    if(electrolyserMaterialLotList == null)
    {
          MaterialLotFilter materialLotFilter = new MaterialLotFilter();
          materialLotFilter.setElectrolyserId(id);
         electrolyserMaterialLotList  = materialService.getMaterialLotByElectrolyserId(materialLotFilter);
    }
     return electrolyserMaterialLotList;
}