我在維護屏幕中實現了自動轉換器(forceSelection = false)。 要編輯現有記錄,用戶將從自動完成列表中選擇ID。JSF轉換器實現
要添加新記錄,用戶將在同一個框中輸入新的ID。
在轉換器中,應用程序將嘗試使用ID在DB中搜索記錄。
如果未找到,則使用提供的ID創建新的空對象並避免重複,此對象將添加到Converter中維護的數組列表中。
這在單個瀏覽器會話上按預期工作。但在使用多個瀏覽器進行測試時,我發現Array列表在所有實例中共享。
我不確定我採取的方法是對的嗎?如果不是,你可以給我一個替代方法。
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;
}
問候,
希裏什