Обновите Vaadin Grid программно - PullRequest
       15

Обновите Vaadin Grid программно

1 голос
/ 26 сентября 2019

Я пытаюсь создать сетку с использованием Vaadin 14, которая обновляется обработчиками событий, которые вызывают метод updateFieldByName, указанный ниже.Тем не менее, сетка никогда не обновляется.

Чего я хотел бы добиться, так это:

    aaa 1
    bbb 2

updateFieldByName ("aaa", "ok");

    aaa ok
    bbb 2

Я пытался использовать grid.setItems (свойства) и 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 + "]";
    }

}

1 Ответ

0 голосов
/ 27 сентября 2019

Как вы точно вызываете метод 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 + "]";
    }
}
...