我写了 Grid,如示例所示。
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);
}
}
Run Code Online (Sandbox Code Playgroud)
但数据重复:
正如我们所见,数据显示了两次。
请指教,有什么问题吗?如何解决?
Class对象传递给Grid构造函数此构造函数grid = new Grid<>(UserDto.class);将根据UserDto类的setter 和 getter 自动添加列。
Class对象传递给Grid构造函数如果要使用addColumn方法配置列,则需要实例化Gridusinggrid = new 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
Run Code Online (Sandbox Code Playgroud)
请参阅此 Grid 构造函数的API 文档以供参考
| 归档时间: |
|
| 查看次数: |
180 次 |
| 最近记录: |