Как да се покажат няколко свойства на Vaadin в една клетка на таблица?

Имам 3 свойства на Java клас, които изисквам да се показват едно под друго в клетка на таблица.

3-те свойства се добавят към контейнер, който е обвързан с таблица - това обаче води до това, че всяко свойство заема различна клетка в същия ред.

e.g.
Container container = new IndexedContainer();
container.addContainerProperty("property1", String.class, "dftvalue1");
container.addContainerProperty("property2", String.class, "dftvalue2");
container.addContainerProperty("property3", String.class, "dftvalue3");

container.getContainerProperty(itemId, "property1").setValue("value1");
...
Table table = new Table("My Table");
table.setContainerDataSource(container);

Искам да се показва, както е показано по-долу.


          |  property1   |
col1      |  property2   |
          |  property3   |

Моля, можете ли да информирате/посъветвате как може да стане това? Благодаря ти Стив.


person Helen Reeves    schedule 27.02.2015    source източник


Отговори (1)


Бихте внедрили Table.ColumnGenerator за това. След това създайте съдържанието за клетката там. Съдържанието може да бъде "всеки" vaadin Component.

Или използвайте напр. Label с HTML съдържание и свържете своите реквизити с <br/> (имайте предвид XSS!). Или можете също да създадете вертикално оформление и да добавите етикет за всяко свойство.

Нещо като това:

def c = new BeanItemContainer<SomeBean>(SomeBean)
c.addAll([
        new SomeBean(prop1: "prop11", prop2: "prop12", prop3: "prop13"),
        new SomeBean(prop1: "prop21", prop2: "prop22", prop3: "prop23"),
        new SomeBean(prop1: "prop31", prop2: "prop32", prop3: "prop33"),
])
setContent(new Table().with{
    setContainerDataSource(c, [])
    addGeneratedColumn("combined", {Table source, Object itemId, Object columnId ->
        (source.getItem(itemId) as BeanItem<SomeBean>).bean.with{
            // UNSAFE CODE! DON'T USE VERBATIM
            new Label("$it.prop1<br />$it.prop2<br />$it.prop3", ContentMode.HTML)
        }
    })
    setVisibleColumns(["combined"].toArray())
    it
})
person cfrick    schedule 27.02.2015