0

我正在测试一个项目,使用 Vaadin 和 Hibernate。我正在尝试使用 HbnContainer 类将数据显示到表中。问题是我不想在表中显示这两个类的所有属性。

例如:

@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 获取表中的字符串值 - 但我无法使用数值删除前一列。

我错过了什么?或者,在显示表格之前“自定义”数据的最佳方式是什么(如果我想在表格中显示来自多个对象类型的数据......我该怎么办?)

如果我不能很快找到一个简单的解决方案,我想我会“手工”构建表格..

那么,对这个问题有什么建议吗?

编辑:
我以前没有很好地表达自己。我需要知道的是如何使用嵌套的 pojos,与 HbnContainer,并控制表中出现的属性(和“子属性”)。我试图扩展和重新实现 HbnContainer 的某些部分,但是.. 无法正确执行。

对于前面的示例,从 Users 表生成的表如下所示:

Name  |Role
George| 1
Alex  | 2 

我想要类似的东西:

Name  | Role
George| admin
Alex  | user
4

3 回答 3

2

您要做的是定义哪些属性应该在表中可见(因此不包括角色 ID)。这可以通过setVisibleColumns()方法来实现。

于 2010-03-19T06:16:29.343 回答
1

formatPropertyValue您可以覆盖Table 类中的方法,而不是隐藏列/添加生成的列。

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 对象),您可以使用以下构造:

User blogger = (User) ((HbnContainer.EntityItem.EntityItemProperty) property).getPojo();
于 2012-11-13T18:25:37.660 回答
0

我和你有同样的问题,这有帮助(希望它也能帮助你)

tblUsers.addGeneratedColumn("userRole", new Table.ColumnGenerator() {
            public Object generateCell(final Table source, final Object itemId, final Object columnId) {
                return new Label(userRoleService.getById(itemId.toString()).getName());
            }
        });
于 2012-06-08T21:30:13.443 回答