Vaadin таблицы скрыть столбцы и контейнер настройки - PullRequest
0 голосов
/ 18 марта 2010

Я тестирую проект, используя 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);

В таблице будут отображаться только столбцы пользователя, а вместо «роли» вместо нее будет указан идентификатор роли. Как я могу скрыть этот столбец и заменить его на UserRole.name?

Мне удалось использовать ColumnGenerator (), чтобы получить строковое значение в таблице для UserRole - но я не смог удалить предыдущий столбец с числовым значением.

Чего мне не хватает? Или, каков наилучший способ «настроить» ваши данные перед отображением таблицы (если я хочу показать данные в таблице из более чем одного типа объекта ... что мне делать?)

Если я не смогу найти простое решение в ближайшее время, я думаю, что я буду просто строить таблицы "вручную" ..

Так, какой-нибудь совет по этому вопросу?

РЕДАКТИРОВАТЬ:
Я не выражал себя хорошо раньше. Что мне нужно знать, так это как использовать вложенные pojos с HbnContainer и контролировать, какие свойства (и «под-свойства») появляются в таблице. Я пытался расширить и переопределить некоторые части HbnContainer, но ... не смог сделать это правильно.

Для предыдущего примера таблица, сгенерированная из таблицы Users, выглядит следующим образом:

Name  |Role
George| 1
Alex  | 2 

Я хочу что-то вроде:

Name  | Role
George| admin
Alex  | user

Ответы [ 3 ]

2 голосов
/ 19 марта 2010

Что вы хотите сделать, это определить, какие свойства должны быть видны в таблице (исключая, таким образом, идентификатор роли). Это может быть достигнуто с помощью метода setVisibleColumns () .

1 голос
/ 13 ноября 2012

Вместо того, чтобы скрывать столбец / добавлять сгенерированный столбец, вы можете переопределить метод 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), вы можете использовать эту конструкцию:

User blogger = (User) ((HbnContainer.EntityItem.EntityItemProperty) property).getPojo();
0 голосов
/ 09 июня 2012

У меня была такая же проблема, как и у вас, это помогло (надеюсь, вам это тоже поможет)

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());
            }
        });
...