0

Vaadin と Hibernate を使用してプロジェクトをテストしています。HbnContainer クラスを使用してデータをテーブルに表示しようとしています。問題は、表に 2 つのクラスのすべてのプロパティを表示したくないことです。

例えば:

@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
}

そして2番目のクラス:

@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 に置き換えるにはどうすればよいですか?

UserRole のテーブル内の文字列値を取得するために ColumnGenerator() を使用することができましたが、数値で前の列を削除できませんでした。

私は何が欠けていますか?または、テーブルを表示する前にデータを「カスタマイズ」する最良の方法は何ですか (テーブルに複数のオブジェクト タイプのデータを表示したい場合はどうすればよいですか?)

簡単な解決策がすぐに見つからない場合は、「手動で」テーブルを作成するだけだと思います..

それで、この問題に関するアドバイスはありますか?

編集:
私は以前に自分自身を表現していませんでした。私が知る必要があるのは、HbnContainer でネストされた pojo を使用し、テーブルに表示されるプロパティ (および「サブプロパティ」) を制御する方法です。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 に答える