diff --git a/vaadin-spring/src/main/java/com/baeldung/EmployeeEditor.java b/vaadin-spring/src/main/java/com/baeldung/EmployeeEditor.java index c10c88978b..ee312786d1 100644 --- a/vaadin-spring/src/main/java/com/baeldung/EmployeeEditor.java +++ b/vaadin-spring/src/main/java/com/baeldung/EmployeeEditor.java @@ -12,31 +12,17 @@ import com.vaadin.flow.spring.annotation.SpringComponent; import com.vaadin.flow.spring.annotation.UIScope; import org.springframework.beans.factory.annotation.Autowired; -/** - * A simple example to introduce building forms. As your real application is probably much - * more complicated than this example, you could re-use this form in multiple places. This - * example component is only used in MainView. - *

- * In a real world application you'll most likely using a common super class for all your - * forms - less code, better UX. - */ @SpringComponent @UIScope public class EmployeeEditor extends VerticalLayout implements KeyNotifier { private final EmployeeRepository repository; - /** - * The currently edited employee - */ private Employee employee; - /* Fields to edit properties in Employee entity */ TextField firstName = new TextField("First name"); TextField lastName = new TextField("Last name"); - /* Action buttons */ - // TODO why more code? Button save = new Button("Save", VaadinIcon.CHECK.create()); Button cancel = new Button("Cancel"); Button delete = new Button("Delete", VaadinIcon.TRASH.create()); @@ -51,10 +37,8 @@ public class EmployeeEditor extends VerticalLayout implements KeyNotifier { add(firstName, lastName, actions); - // bind using naming convention binder.bindInstanceFields(this); - // Configure and style components setSpacing(true); save.getElement().getThemeList().add("primary"); @@ -62,7 +46,6 @@ public class EmployeeEditor extends VerticalLayout implements KeyNotifier { addKeyPressListener(Key.ENTER, e -> save()); - // wire action buttons to save, delete and reset save.addClickListener(e -> save()); delete.addClickListener(e -> delete()); cancel.addClickListener(e -> editEmployee(employee)); @@ -90,28 +73,18 @@ public class EmployeeEditor extends VerticalLayout implements KeyNotifier { } final boolean persisted = c.getId() != null; if (persisted) { - // Find fresh entity for editing employee = repository.findById(c.getId()).get(); } else { employee = c; } + cancel.setVisible(persisted); - - // Bind employee properties to similarly named fields - // Could also use annotation or "manual binding" or programmatically - // moving values from fields to entities before saving binder.setBean(employee); - setVisible(true); - - // Focus first name initially firstName.focus(); } public void setChangeHandler(ChangeHandler h) { - // ChangeHandler is notified when either save or delete - // is clicked changeHandler = h; } - } diff --git a/vaadin-spring/src/main/java/com/baeldung/EmployeeRepository.java b/vaadin-spring/src/main/java/com/baeldung/EmployeeRepository.java index 66b5f329d7..044160da78 100644 --- a/vaadin-spring/src/main/java/com/baeldung/EmployeeRepository.java +++ b/vaadin-spring/src/main/java/com/baeldung/EmployeeRepository.java @@ -1,9 +1,9 @@ package com.baeldung; -import org.springframework.data.jpa.repository.JpaRepository; - import java.util.List; +import org.springframework.data.jpa.repository.JpaRepository; + public interface EmployeeRepository extends JpaRepository { List findByLastNameStartsWithIgnoreCase(String lastName); diff --git a/vaadin-spring/src/main/java/com/baeldung/MainView.java b/vaadin-spring/src/main/java/com/baeldung/MainView.java index 0233f52781..6d4c0aaa88 100644 --- a/vaadin-spring/src/main/java/com/baeldung/MainView.java +++ b/vaadin-spring/src/main/java/com/baeldung/MainView.java @@ -1,5 +1,7 @@ package com.baeldung; +import org.springframework.util.StringUtils; + import com.vaadin.flow.component.button.Button; import com.vaadin.flow.component.grid.Grid; import com.vaadin.flow.component.icon.VaadinIcon; @@ -8,8 +10,6 @@ import com.vaadin.flow.component.orderedlayout.VerticalLayout; import com.vaadin.flow.component.textfield.TextField; import com.vaadin.flow.data.value.ValueChangeMode; import com.vaadin.flow.router.Route; -import com.vaadin.flow.spring.annotation.UIScope; -import org.springframework.util.StringUtils; @Route public class MainView extends VerticalLayout { @@ -31,7 +31,6 @@ public class MainView extends VerticalLayout { this.filter = new TextField(); this.addNewBtn = new Button("New employee", VaadinIcon.PLUS.create()); - // build layout HorizontalLayout actions = new HorizontalLayout(filter, addNewBtn); add(actions, grid, editor); @@ -41,31 +40,23 @@ public class MainView extends VerticalLayout { filter.setPlaceholder("Filter by last name"); - // Hook logic to components - - // Replace listing with filtered content when user changes filter filter.setValueChangeMode(ValueChangeMode.EAGER); filter.addValueChangeListener(e -> listEmployees(e.getValue())); - // Connect selected Employee to editor or hide if none is selected grid.asSingleSelect().addValueChangeListener(e -> { editor.editEmployee(e.getValue()); }); - // Instantiate and edit new Employee the new button is clicked addNewBtn.addClickListener(e -> editor.editEmployee(new Employee("", ""))); - // Listen changes made by the editor, refresh data from backend editor.setChangeHandler(() -> { editor.setVisible(false); listEmployees(filter.getValue()); }); - // Initialize listing listEmployees(null); } - // tag::listEmployees[] void listEmployees(String filterText) { if (StringUtils.isEmpty(filterText)) { grid.setItems(employeeRepository.findAll()); @@ -73,6 +64,4 @@ public class MainView extends VerticalLayout { grid.setItems(employeeRepository.findByLastNameStartsWithIgnoreCase(filterText)); } } - // end::listEmployees[] - }