有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java以编程方式更新Vaadin网格

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

我想要实现的只是:

    aaa 1
    bbb 2

updateFieldByName(“aaa”、“ok”)

    aaa ok
    bbb 2

我试过使用网格。设置项(属性)和网格。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 + "]";
    }

}

共 (1) 个答案

  1. # 1 楼答案

    您究竟是如何调用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();
                });
            }
        }
    
    

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