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);
会根据UserDto
class的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 以供参考
我写的是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);
会根据UserDto
class的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 以供参考