我已经在维护屏幕中实现了 Autoconverter(使用 forceSelection=false)。要编辑现有记录,用户将从自动完成列表中选择 ID。
要添加新记录,用户将在同一框中输入新 ID。
在转换器中,应用程序将尝试使用 ID 搜索数据库中的记录。
如果未找到,则使用提供的 ID 创建新的空对象,并为避免重复,将此对象添加到 Converter 中维护的数组列表中。
这在单个浏览器会话上按预期工作。但是在使用多个浏览器进行测试时,我发现数组列表在所有实例之间共享。
我不确定我采取的方法是否正确?如果不能,请建议我另一种方法。
private List<SchoolMasterDetails> schoolMasterDetailsDB = new ArrayList<SchoolMasterDetails>();
@Override
public Object getAsObject(FacesContext facesContext, UIComponent component, String submittedValue) {
SchoolMasterDetails selectedObject = null;
System.out.println("getAsObject ==> Entering.");
System.out.println("getAsObject ==> '" + submittedValue + "'");
if (!submittedValue.trim().equals("")) {
selectedObject = (SchoolMasterDetails) getMasterService().getSchoolbyCode(submittedValue);
if (selectedObject == null) {
// search Object on localDB
for (SchoolMasterDetails p : schoolMasterDetailsDB) {
if (p.getSchoolCode().equalsIgnoreCase(submittedValue.trim())) {
System.out.println("getAsObject from ArrayList ==> " + p);
return p; // return selectedObject from list of created objects
}
}
System.out.println("getAsObject ==> selectedObject is null, Hence Creating new Object");
selectedObject = new SchoolMasterDetails();
selectedObject.setSchoolCode(submittedValue.trim());
selectedObject.setSchoolName("TEST TEST TEST");
schoolMasterDetailsDB.add(selectedObject);
}
else {
System.out.println("getAsObject from Database ==> " + selectedObject);
}
}
System.out.println("getAsObject ==> " + selectedObject);
}
System.out.println("getAsObject ==> Exiting.");
return selectedObject;
}
问候,
希里什语