Vaadin:网格重复数据

Vaadin: Grid duplicates data

我写的是Grid,如图example

public class MainView extends VerticalLayout {

    private final UserService userService;
    private Label label;
    private Grid<UserDto> grid;

    public MainView(UserService userService) {
        this.userService = userService;
        initComponents(userService);
    }

    private void initComponents(UserService userService) {
        initMainGrid(userService);
    }

    private void initMainGrid(UserService userService) {
        grid = new Grid<>(UserDto.class);

        grid.setItems(userService.getAll());

        grid.addColumn(UserDto::getId).setHeader("ID");
        grid.addColumn(UserDto::getUsername).setHeader("Имя пользователя");
        grid.addColumn(UserDto::getPassword).setHeader("Пароль");
        grid.addColumn(UserDto::getEmail).setHeader("email");
        grid.addColumn(UserDto::getPhone).setHeader("Телефон");
        grid.addColumn(UserDto::getActive).setHeader("Активен");

        add(grid);
    }
}

但是数据重复:

正如我们所见,数据显示了两次。

请指教,哪里不对?如何解决?

Class 对象传递给 Grid 构造函数

这个构造函数grid = new Grid<>(UserDto.class);会根据UserDtoclass的setter和getter自动添加列。

没有将 Class 对象传递给 Grid 构造函数

如果要使用addColumn方法配置列,则需要使用grid = new Grid<>();实例化Grid而不通过UserDto.class

@TatuLund

的小补充

您还可以使用附加布尔参数初始化网格,这将防止自动生成列。这样您在添加列时仍然可以使用 属性 名称(OP 不使用它,但如果他使用了那么这将是非常有用的信息)。

Grid<UserDto> grid = new Grid<>(UserDto.class, false);
grid.addColumn("id"); // this would not be possible witout passing the class in constructor

参见此 Grid 构造函数的 API Documentation 以供参考