This commit is contained in:
Ganesh Pagade 2018-07-23 23:43:11 +05:30
parent dacf049162
commit 35c92fae5f
3 changed files with 5 additions and 43 deletions

View File

@ -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.
* <p>
* 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;
}
}

View File

@ -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<Employee, Long> {
List<Employee> findByLastNameStartsWithIgnoreCase(String lastName);

View File

@ -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[]
}