Vaadin 8 Grid 不再有 grid.addRow(obj)
Vaadin 8 Grid no longer had grid.addRow(obj)
我最近接到了一个 Vaadin 7 项目,之前的开发人员使用 Vaadin 7 Grid grid.addRow(obj) 向网格添加行。现在在 Vaadin 8 Grid 中添加了 grid.setItems(? Collection ?) 这完全消除了 grid.setItems() 上 Grid 中的数据。我观看了 Vaadin 的所有 YouTube 视频和所有堆栈溢出页面,但没有找到答案。
我确实发现这个论坛有一群人有同样的问题:
https://vaadin.com/forum#!/thread/15724440
这是我的工作,我并不以此为荣。基本上添加一个 ArrayList,因为我的示例使用一个带有 firstName、lastName、email 和 salary 的 Person class。
@SpringUI(path = "/person")
@Theme("valo")
public class PersonForm extends UI{
@Autowired
PersonService personService;
List<Person> entries = new ArrayList<Person>();
private TextField firstName = new TextField("First Name");
private TextField lastName = new TextField("Last Name");
private TextField email = new TextField("Email Address");
private TextField salary = new TextField("Salary");
private Person person = new Person();
private Grid<Person> grid = new Grid<>(Person.class);
final private FormLayout layout = new FormLayout();
@Override
protected void init(VaadinRequest request){
grid.getEditor().isEnabled();
grid.setColumnOrder("firstName", "lastName",
"email", "salary");
layout.addComponent(firstName);
layout.addComponent(lastName);
layout.addComponent(email);
Button save = new Button("Save", e-> {
addPersonToGrid(new Person(firstName.getValue(), lastName.getValue(), email.getValue(),salary.getValue()));
Notification.show("PERSON WAS SAVED");
});
layout.addComponent(save);
layout.addComponent(grid);
layout.setMargin(true);
setContent(layout);
}
public void addPersonToGrid(Person person){
entries.add(person);
grid.setItems(entries);
}
}
你是对的,Vaadin8 中不再有 addRow / addBean 方法。
但是,您可以使用非常简洁的 DataProvider 而不是使用旧的 BeanItemContainer。您现在可以直接在 DataProvider 上设置 Filters 和 SortOrders。
像这样使用 DataProvider 会更容易:
private ListDataProvider<Person> provider = ListDataProvider.ofCollection(entries);
@Override
protected void init(VaadinRequest request){
grid.setDataProvider(provider);
........
}
public void addPersonToGrid(Person person){
entries.add(person);
provider.refreshAll();
}
public void editPersonToGrid(int idx, Person person){
entries.set(idx, person);
provider.refreshItem(person);
}
它不像调用 entries.add(person) 那样整洁,其他所有事情都自动处理,但它适用于大型数据集,如果您使用过滤器和排序,它会非常方便。
我最近接到了一个 Vaadin 7 项目,之前的开发人员使用 Vaadin 7 Grid grid.addRow(obj) 向网格添加行。现在在 Vaadin 8 Grid 中添加了 grid.setItems(? Collection ?) 这完全消除了 grid.setItems() 上 Grid 中的数据。我观看了 Vaadin 的所有 YouTube 视频和所有堆栈溢出页面,但没有找到答案。
我确实发现这个论坛有一群人有同样的问题: https://vaadin.com/forum#!/thread/15724440
这是我的工作,我并不以此为荣。基本上添加一个 ArrayList,因为我的示例使用一个带有 firstName、lastName、email 和 salary 的 Person class。
@SpringUI(path = "/person")
@Theme("valo")
public class PersonForm extends UI{
@Autowired
PersonService personService;
List<Person> entries = new ArrayList<Person>();
private TextField firstName = new TextField("First Name");
private TextField lastName = new TextField("Last Name");
private TextField email = new TextField("Email Address");
private TextField salary = new TextField("Salary");
private Person person = new Person();
private Grid<Person> grid = new Grid<>(Person.class);
final private FormLayout layout = new FormLayout();
@Override
protected void init(VaadinRequest request){
grid.getEditor().isEnabled();
grid.setColumnOrder("firstName", "lastName",
"email", "salary");
layout.addComponent(firstName);
layout.addComponent(lastName);
layout.addComponent(email);
Button save = new Button("Save", e-> {
addPersonToGrid(new Person(firstName.getValue(), lastName.getValue(), email.getValue(),salary.getValue()));
Notification.show("PERSON WAS SAVED");
});
layout.addComponent(save);
layout.addComponent(grid);
layout.setMargin(true);
setContent(layout);
}
public void addPersonToGrid(Person person){
entries.add(person);
grid.setItems(entries);
}
}
你是对的,Vaadin8 中不再有 addRow / addBean 方法。 但是,您可以使用非常简洁的 DataProvider 而不是使用旧的 BeanItemContainer。您现在可以直接在 DataProvider 上设置 Filters 和 SortOrders。
像这样使用 DataProvider 会更容易:
private ListDataProvider<Person> provider = ListDataProvider.ofCollection(entries);
@Override
protected void init(VaadinRequest request){
grid.setDataProvider(provider);
........
}
public void addPersonToGrid(Person person){
entries.add(person);
provider.refreshAll();
}
public void editPersonToGrid(int idx, Person person){
entries.set(idx, person);
provider.refreshItem(person);
}
它不像调用 entries.add(person) 那样整洁,其他所有事情都自动处理,但它适用于大型数据集,如果您使用过滤器和排序,它会非常方便。