package com.example; import com.vaadin.data.Binder; import com.vaadin.server.VaadinRequest; import com.vaadin.spring.annotation.SpringUI; import com.vaadin.ui.*; import org.springframework.beans.factory.annotation.Autowired; import java.util.List; @SpringUI public class VaadinUI extends UI { @Autowired private CustomerService service; private Customer customer; private Binder binder = new Binder<>(Customer.class); private Grid grid = new Grid(Customer.class); private TextField firstName = new TextField("First name"); private TextField lastName = new TextField("Last name"); private Button save = new Button("Save", e -> saveCustomer()); @Override protected void init(VaadinRequest request) { updateGrid(); grid.setColumns("firstName", "lastName"); grid.addSelectionListener(e -> updateForm()); binder.bindInstanceFields(this); VerticalLayout layout = new VerticalLayout(grid, firstName, lastName, save); setContent(layout); } private void updateGrid() { List customers = service.findAll(); grid.setItems(customers); setFormVisible(false); } private void updateForm() { if (grid.asSingleSelect().isEmpty()) { setFormVisible(false); } else { customer = grid.asSingleSelect().getValue(); binder.setBean(customer); setFormVisible(true); } } private void setFormVisible(boolean visible) { firstName.setVisible(visible); lastName.setVisible(visible); save.setVisible(visible); } private void saveCustomer() { service.update(customer); updateGrid(); } }