【发布时间】:2019-09-26 13:20:58
【问题描述】:
我正在尝试使用 Vaadin 14 创建一个网格,该网格由调用下面的 updateFieldByName 方法的事件处理程序更新。但是,网格永远不会刷新。
我想要实现的只是这个:
aaa 1
bbb 2
updateFieldByName("aaa", "ok");
aaa ok
bbb 2
我尝试过使用 grid.setItems(properties) 和 grid.setDataProvider(dataProvider),但表格只是不想更新。
List<Property> properties = Arrays.asList(new Property("aaa", "1"), new Property("bbb", "2"));
ListDataProvider<Property> dataProvider = DataProvider.ofCollection(properties);
Grid<Property> grid = new Grid<>(Property.class);
grid.setDataProvider(dataProvider);
private void updateFieldByName(final String name, final String value) {
properties.stream().filter((o) -> o.getName().equals(name)).forEach((p) -> {
p.setValue(value);
dataProvider.refreshAll();
});
}
public static class Property {
private String name;
private String value;
public Property(final String name) {
this(name, "-");
}
public Property(final String name, final String value) {
super();
this.name = name;
this.value = value;
}
public String getName() {
return name;
}
public void setName(final String name) {
this.name = name;
}
public String getValue() {
return value;
}
public void setValue(final String value) {
this.value = value;
}
@Override
public String toString() {
return "[" + name + " = " + value + "]";
}
}
【问题讨论】:
-
不确定这是否或为什么会有所不同,但您可以尝试在流之外的 refreshAll 吗?
-
其实当你不添加/删除项目时,调用 refreshItem(item) 来改变项目就足够了。我还想问一下,为什么你的 bean 使用静态类?