【问题标题】:Vaadin: Grid duplicates dataVaadin:网格重复数据
【发布时间】:2024-01-03 20:45:01
【问题描述】:

我写了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);
    }
}

但数据重复:

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

请指教,有什么问题吗?如何解决?

【问题讨论】:

    标签: java grid vaadin


    【解决方案1】:

    对@TatuLund 的the correct answer 的小补充

    您还可以使用附加布尔参数来初始化网格,这将防止自动生成列。这样你在添加列时仍然可以使用属性名称(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 以供参考

    【讨论】:

      【解决方案2】:

      Class 对象传递给Grid 构造函数

      此构造函数grid = new Grid&lt;&gt;(UserDto.class); 将根据UserDto 类的setter 和getter 自动添加列。

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

      如果要使用addColumn 方法配置列,则需要使用grid = new Grid&lt;&gt;(); 实例化Grid,而不传递UserDto.class

      【讨论】:

        最近更新 更多