jso*_*ski 8 java vaadin vaadin7 vaadin-grid
我使用数据库中的数据创建简单网格:
BeanItemContainer<Customer> container = new BeanItemContainer<>(Customer.class, customerRepository.findAll());
Grid grid = new Grid(container);
Run Code Online (Sandbox Code Playgroud)
要编辑按钮的每一行:
Button edit = new Button("Edit", clickEvent -> openWindow((Customer) grid.getSelectedRows().iterator().next()));
Run Code Online (Sandbox Code Playgroud)
这个打开的新窗口带有编辑表单.接受所有更改后,我必须手动刷新整个页面以查看Grid上的修改.我的问题是:
如何在修改任何行条目后仅刷新网格?如何将这些修改保存到数据库(也许beanItemContainer可以做到)?
小智 10
使用Vaadin 8,以下工作方式可以在添加或删除行或更改基础数据后刷新网格:
grid.getDataProvider().refreshAll();
Run Code Online (Sandbox Code Playgroud)
这是一个错误.在底层容器中进行更改后,Grid不会自行更新,也没有任何合理的刷新方法.围绕这个问题有几个黑客,即
grid.clearSortOrder();
Run Code Online (Sandbox Code Playgroud)
要么
grid.setEditorEnabled(true);
grid.setEditorEnabled(false);
Run Code Online (Sandbox Code Playgroud)
SSCCE:
TextField text = new TextField("Edit");
Grid grid;
BeanItemContainer<Customer> container;
@Override
protected void init(VaadinRequest request) {
final VerticalLayout layout = new VerticalLayout();
container = new BeanItemContainer<>(Customer.class, Arrays.asList(new Customer("1"), new Customer("2")));
grid = new Grid(container);
Button open = new Button("open");
open.addClickListener(this :: openListener);
Button save = new Button("save");
save.addClickListener(this :: saveListener);
layout.addComponents(grid, open, save, text);
setContent(layout);
}
private void openListener(Button.ClickEvent clickEvent){
text.setValue(((Customer) (grid.getSelectedRow())).getName());
}
private void saveListener(Button.ClickEvent clickEvent){
Customer c = (Customer) grid.getSelectedRow();
c.setName(text.getValue());
grid.clearSortOrder();
}
Run Code Online (Sandbox Code Playgroud)
在Vaadin 7.4应用程序中,可能重复更新网格,其中包含一组新数据
| 归档时间: |
|
| 查看次数: |
21072 次 |
| 最近记录: |