2013-10-22 59 views
2

我需要显示表中列表中包含的所有值。Vaadin:在表中显示一个列表

例如:

class Person { 
    String name; 
    String age; 
    List<Rule> rules; 
} 

,我希望得到的结果:

|name |age  |rules 
alex  22  administrator, user, etc.. 

其中管理员和用户属于Rule.name财产

有谁知道该怎么做?

回答

6

您应该可以根据需要添加生成的列并根据列表格式设置列表中的值。你可以找到一个例子here,只是向下滚动到章节5.16.5生成的表列

既然你还没有发布任何代码,我不知道怎么样了设置你的表。为了方便起见,我创建了一个带有BeanItemContainer<Person>的简单表格,并添加了“规则”生成的列。还有改进的余地,但你应该得到的想法:

BeanItemContainer<Person> dataSource = new BeanItemContainer<Person>(Person.class); 
    table_1.setContainerDataSource(dataSource); 
    // create generated column and specify our "generator/formatter" 
    table_1.addGeneratedColumn("rules", new RuleGenerator()); 
    dataSource.addAll(new ArrayList<Person>(){{add(new Person());}}); 

格式化/发电机:

public class RuleGenerator implements Table.ColumnGenerator { 
    @Override 
    public Object generateCell(Table source, Object itemId, Object columnId) { 
     Label label = new Label(); 
     StringBuilder labelContent = new StringBuilder(); 
     for(Rule rule : ((Person) itemId).getRules()){ 
      labelContent.append(rule.getName()).append(","); 
     } 
     label.setValue(labelContent.toString()); 
     return label; 
    } 
} 

这是我得到:

Output

+0

非常感谢,它的作品:) – Alessandro

+0

很高兴帮助。我认为你可以避免设置可见列,如果你使用生成列的id作为Vaadin从bean创建的同一个列:'table_1.addGeneratedColumn(“rules”,new RuleGenerator());'。查看更新的示例 – Morfic

3

是否使用Vaadin 7 ?如果是,则使用转换器。 A转换器是一个接口,转换为数据源(在你的情况下,集合)到表示(在你的情况下,字符串)之间的值。在vaadin 7中没有任何内置的集合< - >字符串转换器,但自己实现它是微不足道的。一旦你已经实现了转换器,你可以通过调用table.setConverter(propertyId,converter)将它应用到列上;

转换器对列生成器的好处是:1)仍然可以根据该列进行排序/过滤2)不需要返回组件,而只需一个字符串。这会创建更少的开销和较轻的DOM结构,使浏览器呈现更快。