Я использую Java EE6 и JSF для создания простого приложения CRUD.Страницы Jsf не показывают недавно добавленные значения
На многих моих страницах JSF у меня есть selectOneMenu для выбора пользователем существующего элемента. Например, если пользователь добавляет «Экзамен», он может выбрать «Отдел» из комбинированного поля, так как у них есть отношения «один ко многим».
Проблема заключается в том, что всякий раз, когда добавляется новый Департамент, значения со списком не обновляются до истечения времени сеанса. Мне нужно использовать бэкэнсы SessionScoped, потому что мне нужно, чтобы значения сохранялись в нескольких Запросах.
Вот функция, я использую для заполнения selectOneMenu (не так, как в описанном выше примере, но очень похоже):
public SelectItem[] getExamsByDepartment(){
if(departmentMaster!=null){
Collection<ExamMaster> examMasterCollection = departmentMaster.getExamMasterCollection();
//Problem: newly added exams aren't shown until session is re-created
if (examMasterCollection != null && examMasterCollection.size() > 0) {
SelectItem[] selectItem = new SelectItem[examMasterCollection.size()];
Iterator<ExamMaster> i = examMasterCollection.iterator();
int count = 0;
while (i.hasNext()) {
ExamMaster tmpExamMaster = i.next();
selectItem[count++] = new SelectItem(tmpExamMaster, tmpExamMaster.getExamName());
}
return selectItem;
}
}
SelectItem[] selectItem = new SelectItem[1];
selectItem[0] = new SelectItem("", "[No exams found]");
return selectItem;
}
Есть ли обходной путь, по которому я могу уничтожить и воссоздать сессия? Или любым другим способом, с помощью которого я могу решить эту проблему?
EDIT: Я думаю, вопрос сводится к тому, почему коллекция не обновляется после вставки записи, даже если отношения один-ко-многим определяется в классе Persistence
EDIT 2: Вместо того, чтобы использовать в коллекции я использую Named Query сейчас, и он извлекает новую запись, как ожидалось. Я предположил, что коллекция должна быть обновлена автоматически. Возможно, это не так?
Спасибо за отзыв о ViewScope. Что касается коллекции, я получаю ее каждый раз, но у нее нет новой записи. – Akshay