Я реализовал Autoconverter (с forceSelection = false) на экране обслуживания. Чтобы изменить существующую запись, пользователь выберет идентификатор из списка автозаполнения.Реализация JSF-конвертера
Чтобы добавить новую запись, пользователь вводит новый идентификатор в том же поле.
В конвертере приложение попытается выполнить поиск записи в БД с использованием ID.
Если не найден, создается новый пустой объект с указанным идентификатором и во избежание дублирования этот объект добавляется в список массивов, поддерживаемый в конвертере.
Это работает как ожидается в сеансе с одним браузером. но при тестировании с несколькими браузерами я обнаружил, что список 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;
}
С уважением,
Shirish