【问题标题】:Vaadin: display a list in tableVaadin:在表格中显示列表
【发布时间】:2013-10-22 15:08:27
【问题描述】:

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

例如:

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

我期望的结果:

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

管理员和用户属于 Rule.name 属性的位置

有人知道怎么做吗?

【问题讨论】:

    标签: list class vaadin


    【解决方案1】:

    您应该能够根据需要添加生成的列并格式化列表中的值。你可以找到一个例子here,只需向下滚动到5.16.5 Generated Table Columns

    一章

    由于您没有发布任何代码,我不知道您是如何设置表格的。为方便起见,我创建了一个带有BeanItemContainer&lt;Person&gt; 的简单表,并添加了一个“规则”生成列。有改进的余地,但你应该明白:

        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;
        }
    }
    

    这是我得到的:

    【讨论】:

    • 很高兴为您提供帮助。我认为如果您将生成列的 id 用作与 Vaadin 从 bean 创建的同一列:table_1.addGeneratedColumn("rules", new RuleGenerator());,则可以避免设置可见列。查看更新的示例
    【解决方案2】:

    您使用的是 Vaadin 7 吗?如果是,则使用转换器。转换器是一个接口,转换数据源(在您的情况下为集合)到表示(在您的情况下为字符串)之间的值。 vaadin 7 中没有任何内置的集合 字符串转换器,但自己实现它很简单。实现转换器后,您可以通过调用 table.setConverter(propertyId, converter); 将其应用到列上

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-08
      • 2015-04-30
      • 1970-01-01
      相关资源
      最近更新 更多