2015-02-27 2 views
0

У меня есть 3 свойства класса java, которые мне нужно отображать друг под другом в ячейке таблицы.Как отображать несколько свойств Vaadin в одной ячейке таблицы?

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

Для этого вы должны ввести 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 
}) 
Смежные вопросы