Доброго времени суток. Вопрос про vaadin8+hibernate. Есть маленькое недопонимание, необходимо связать данные, которые вводятся с формы(DoctorForm) с БД для последующего отображения в Grid. Данные также должны заноситься в HSQLDB с in-process режимом, использую hibernate для записи данных в мою БД(сервисы с CRUD операциями). Пытался работать через биндер, e.t.c. Ничего не получается, многочисленные туториалы в интернете лишь путают, не могу найти адекватную информацию про vaadin 8. Каждый раз, нажимая кнопку “save”, в БД выводится toString() с null значениями по всем String переменным, необходимо, чтобы значения нулям равны не были. Проблемы с отображением в Grid нет, строки там появляются, только пустые.
public class DoctorForm {
private DoctorService docSer = new DoctorService();
private Doctor doctor = new Doctor();
private Binder<Doctor> binder = new Binder<>(Doctor.class);
public Window addDoctor(Grid grid){
Window window = new Window();
window.center();
window.setModal(true);
window.setWidth("650");
window.setHeight("450");
VerticalLayout add = new VerticalLayout();
add.setSizeFull();
add.setMargin(true);
TextField lName = new TextField("Фамилия");
TextField fName = new TextField("Имя");
TextField mName = new TextField("Отчество");
TextField spec = new TextField("Специальность");
Button save = new Button("Сохранить");
Button cancel = new Button("Отменить");
VerticalLayout doctorWindow = new VerticalLayout();
doctorWindow.setMargin(true);
doctorWindow.setSizeFull();
HorizontalLayout names = new HorizontalLayout();
names.addComponents(lName, fName, mName);
HorizontalLayout pnumber = new HorizontalLayout();
pnumber.addComponents(spec);
HorizontalLayout buttons = new HorizontalLayout();
buttons.addComponents(save, cancel);
save.addClickListener(e -> {
docSer.create(doctor);
HibernateUtil.getSessionFactory().openSession();
binder.forField(lName).bind(Doctor::getLn, Doctor::setLn);
binder.forField(fName).bind(Doctor::getFn, Doctor::setFn);
binder.forField(mName).bind(Doctor::getMn, Doctor::setMn);
binder.forField(spec).bind(Doctor::getSpecialty, Doctor::setSpecialty);
try {
binder.writeBean(doctor);
} catch (ValidationException e1) {
e1.printStackTrace();
}
List<Doctor> doctors = docSer.readAll();
grid.setItems(doctors);
window.close();
});
cancel.addClickListener(e -> window.close());
add.addComponents(names, pnumber, buttons);
window.setContent(add);
return window;
}
}
public class DoctorTable {
// private DoctorForm df = new DoctorForm();
private DoctorService ds = new DoctorService();
private Grid<Doctor> doctorGrid = new Grid<>(Doctor.class);
public VerticalLayout docTable(){
Label label = new Label("Доктора");
doctorGrid.removeAllColumns();
doctorGrid.addColumn(Doctor::getLn).setCaption("Фамилия");
doctorGrid.addColumn(Doctor::getFn).setCaption("Имя");
doctorGrid.addColumn(Doctor::getMn).setCaption("Отчество");
doctorGrid.addColumn(Doctor::getSpecialty).setCaption("Специальность");
doctorGrid.setSizeFull();
Button add = new Button("Добавить");
Button update = new Button("Редактировать");
Button delete = new Button("Удалить");
HorizontalLayout buttons = new HorizontalLayout(add, update, delete);
VerticalLayout doctors = new VerticalLayout(label, doctorGrid, buttons);
add.addClickListener(e -> buttons.getUI().addWindow(new DoctorForm().addDoctor(doctorGrid)));
return doctors;
}
public void updatelist(){
List<Doctor> doclist = ds.readAll();
doctorGrid.setItems(doclist);
}
}