Spring Vaadin 8网格不再具有Grid.addRow(obj)
我最近收到了一个Vaadin7项目,之前的开发人员使用Vaadin7GridGrid.addRow(obj)将行添加到网格中。现在在Vaadin 8网格中,添加了Grid.setItems(?Collection?),这将完全清除Grid.setItems()上网格中的数据。我看了所有来自Vaadin的YouTube视频和所有堆栈溢出页面,没有找到答案 我确实发现这个论坛有一群人有同样的问题: 这是我的作品,我并不为此感到骄傲。基本上,在我的示例中添加一个ArrayList会使用一个名为firstName、lastName、email和salary的Person类Spring Vaadin 8网格不再具有Grid.addRow(obj),spring,vaadin,vaadin-grid,Spring,Vaadin,Vaadin Grid,我最近收到了一个Vaadin7项目,之前的开发人员使用Vaadin7GridGrid.addRow(obj)将行添加到网格中。现在在Vaadin 8网格中,添加了Grid.setItems(?Collection?),这将完全清除Grid.setItems()上网格中的数据。我看了所有来自Vaadin的YouTube视频和所有堆栈溢出页面,没有找到答案 我确实发现这个论坛有一群人有同样的问题: 这是我的作品,我并不为此感到骄傲。基本上,在我的示例中添加一个ArrayList会使用一个名为fir
@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);
}
}
@SpringUI(path=“/person”)
@主题(“valo”)
公共类PersonForm扩展UI{
@自动连线
人情服务人情服务;
列表项=新的ArrayList();
私有TextField firstName=新TextField(“firstName”);
私有TextField lastName=新TextField(“姓氏”);
私人TextField email=新TextField(“电子邮件地址”);
私有文本字段工资=新文本字段(“工资”);
私人=新人();
私有网格=新网格(Person.class);
最终私有FormLayout布局=新FormLayout();
@凌驾
受保护的void init(VaadinRequest请求){
grid.getEditor().isEnabled();
grid.setColumnOrder(“firstName”、“lastName”,
“电子邮件”、“工资”);
layout.addComponent(名字);
layout.addComponent(lastName);
布局。添加组件(电子邮件);
按钮保存=新建按钮(“保存”,e->{
addPersonToGrid(新人(firstName.getValue()、lastName.getValue()、email.getValue()、salary.getValue());
通知。显示(“人员已保存”);
});
布局。添加组件(保存);
布局。添加组件(网格);
布局。设置页边距(真);
设置内容(布局);
}
公共void addPersonToGrid(个人){
条目。添加(人);
网格设置项(条目);
}
}
您是正确的,因为在Vaadin8中不再有addRow/addBean方法。
但是,您可以使用非常整洁的数据提供者,而不是使用旧的BeanItemContainer。现在可以直接在数据提供程序上设置筛选器和排序器
使用这样的数据提供程序会更容易:
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);
}
private ListDataProvider provider=ListDataProvider.of Collection(条目);
@凌驾
受保护的void init(VaadinRequest请求){
grid.setDataProvider(provider);
........
}
公共void addPersonToGrid(个人){
条目。添加(人);
provider.refreshAll();
}
公共无效editPersonToGrid(int idx,个人){
条目集(idx,个人);
提供者。刷新项目(人);
}
它不像只调用条目那么简单。添加(person)和自动处理的所有其他内容,但它适用于大型数据集,如果您使用过滤器和排序,它将非常方便。非常有效,谢谢!