но когда я нажимаю comfirm, значение в пользовательском интерфейсе не изменяется
Вы связали значение <p:dataTable>
с retrieve()
вместо getSubjects()
. Таким образом, каждый вызов геттера будет получать значения напрямую из БД, а не из модели.
и я не вижу изменений в базе данных
Вы ничего не сохраняете в БД.
Исправьте ваш контроллер следующим образом:
@Named
@SessionScoped
public class SubjectControllerUpdate implements Serializable {
private DataModel<Subject> subjects;
@EJB
private SubjectFacade ejbFacade;
@PostConstruct
public void init() {
subjects = new ListDataModel<Subject>(ejbFacade.findAll());
}
public void save() {
ejbFacade.save(subjects.getRowData());
}
public List<Subject> getSubjects() {
return subjects;
}
}
с
<h:form>
<p:dataTable value="#{subjectControllerUpdate.subjects}" ...>
<p:ajax event="rowEdit" listener="#{subjectControllerUpdate.save}" />
...
</p:dataTable>
</h:form>
Использование DataModel<Subject>
вместо List<Subject>
необходимо для получения текущей строки.