如何在单个表格单元格中显示多个Vaadin属性?

时间:2015-02-27 16:31:18

标签: vaadin vaadin7

我有一个需要显示的java类的3个属性 在表格单元格中彼此相同。

将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   |

请告知/建议如何做到这一点? 谢谢史蒂夫。

1 个答案:

答案 0 :(得分: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
})