Vaadin:在表格中显示一个列表

时间:2013-10-22 15:08:28

标签: list class vaadin

我需要在表格中显示列表中包含的所有值。

例如:

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

我期望的结果:

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

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

有谁知道怎么做?

2 个答案:

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

答案 1 :(得分:3)

您使用的是Vaadin 7吗?如果是,则使用转换器。转换器是将数据源(在您的情况下为集合)与表示(在您的情况下为字符串)之间的值转换为的接口。没有任何内置集合&lt; - &gt; vaadin 7中的字符串转换器,但是自己实现它是微不足道的。实现转换器后,可以通过调用table.setConverter(propertyId,converter);

将其应用于列。

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