gpt4 book ai didi

java - 以编程方式更新 Vaadin 网格

转载 作者:太空宇宙 更新时间:2023-11-04 09:22:46 26 4
gpt4 key购买 nike

我正在尝试使用 Vaadin 14 创建一个网格,该网格由调用下面的 updateFieldByName 方法的事件处理程序更新。但是,网格永远不会刷新。

我想要实现的目标很简单:

    aaa 1
bbb 2

updateFieldByName("aaa", "确定");

    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 + "]";
}

}

最佳答案

您到底是如何调用 updateFieldByName 方法的?我添加了一个 TextField,在其中输入 aaa ,并且在调用 ValueChangeEvent 后,网格会正确更新。

这是我正在使用的代码。 (我为 Property 类创建了一个单独的类)

import com.vaadin.flow.component.grid.Grid;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.component.textfield.TextField;
import com.vaadin.flow.data.provider.DataProvider;
import com.vaadin.flow.data.provider.ListDataProvider;
import com.vaadin.flow.router.Route;

import java.util.Arrays;
import java.util.List;

@Route("gridSO")
public class GridUpdateSO extends VerticalLayout {

List<Property> properties = Arrays.asList(new Property("aaa", "1"), new Property("bbb", "2"));
ListDataProvider<Property> dataProvider = DataProvider.ofCollection(properties);
public GridUpdateSO() {
Grid<Property> grid = new Grid<>(Property.class);
grid.setDataProvider(dataProvider);
add(grid);
TextField ab=new TextField("TextField", e->{
updateFieldByName(e.getValue(),"ok");

});
add(ab);
}
private void updateFieldByName(final String name, final String value) {
properties.stream().filter((o) -> o.getName().equals(name)).forEach((p) -> {
p.setValue(value);
dataProvider.refreshAll();
});
}
}

Property.java

public 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 + "]";
}
}

关于java - 以编程方式更新 Vaadin 网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58117774/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com