Hibernate Vaadin表格隐藏列和容器自定义
我正在测试一个项目,使用Vaadin和Hibernate。我试图使用HbnContainer类将数据显示到表中。问题是我不想在表中显示这两个类的所有属性 例如:Hibernate Vaadin表格隐藏列和容器自定义,hibernate,vaadin,Hibernate,Vaadin,我正在测试一个项目,使用Vaadin和Hibernate。我试图使用HbnContainer类将数据显示到表中。问题是我不想在表中显示这两个类的所有属性 例如: @Entity @Table(name="users") class User { @Id @GeneratedValue(strategy=GenerationType.AUTO) private Long id; private String name; @ManyToOne(cascade=CascadeType.PERSIST
@Entity
@Table(name="users")
class User {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
private String name;
@ManyToOne(cascade=CascadeType.PERSIST)
private UserRole role;
//getters and setters
}
第二类:
@Entity
@Table(name="user_roles")
class UserRole {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
private String name;
//getters and setters
}
接下来,我使用HbnContainer检索数据,并将其连接到表:
HbnContainer container = new HbnContainer(User.class, app);
table.setContainerDataSource(container);
该表将只显示来自用户的列,对于“角色”,它将放置角色id。如何隐藏该列,并将其替换为UserRole.name
我设法使用ColumnGenerator()获取表中UserRole的字符串值,但我无法删除上一列的数值
我错过了什么?或者,在显示表之前,“自定义”数据的最佳方式是什么(如果我想在表中显示来自多个对象类型的数据..我该怎么办?)
如果我不能很快找到一个简单的解决方案,我想我会“手工”建立表格
那么,对这件事有什么建议吗
编辑:我很久以前就没有向他表达过自己的观点。我需要知道的是如何使用嵌套POJO和HbnContainer,并控制表中显示的属性(和“子属性”)。我试图扩展和重新实现HbnContainer的某些部分,但是。。无法正确完成此操作。
对于上一个示例,从Users表生成的表如下所示:
Name |Role
George| 1
Alex | 2
我想要像这样的东西:
Name | Role
George| admin
Alex | user
您要做的是定义哪些属性应该在表中可见(从而排除角色id)。这可以通过该方法实现。您要做的是定义哪些属性应该在表中可见(从而排除角色id)。这可以通过这种方法实现。我和你有同样的问题,这很有帮助(希望它也能帮助你)
我和你有同样的问题,这有帮助(希望它也能帮助你)
您可以在表类中重写
formatPropertyValue
方法,而不是隐藏列/添加生成的列
final Table table = new Table() {
@Override
protected String formatPropertyValue(Object rowId, Object colId, Property property) {
if ("column".equals(colId)) {
return "something";
}
return super.formatPropertyValue(rowId, colId, property);
}
};
要获取POJO(在您的案例中为用户对象),可以使用以下构造:
User blogger = (User) ((HbnContainer.EntityItem.EntityItemProperty) property).getPojo();
您可以在表类中重写
formatPropertyValue
方法,而不是隐藏列/添加生成的列
final Table table = new Table() {
@Override
protected String formatPropertyValue(Object rowId, Object colId, Property property) {
if ("column".equals(colId)) {
return "something";
}
return super.formatPropertyValue(rowId, colId, property);
}
};
要获取POJO(在您的案例中为用户对象),可以使用以下构造:
User blogger = (User) ((HbnContainer.EntityItem.EntityItemProperty) property).getPojo();