Как отобразить несколько свойств 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