我需要显示表中列表中包含的所有值。Vaadin:在表中显示一个列表
例如:
class Person {
String name;
String age;
List<Rule> rules;
}
,我希望得到的结果:
|name |age |rules
alex 22 administrator, user, etc..
其中管理员和用户属于Rule.name财产
有谁知道该怎么做?
我需要显示表中列表中包含的所有值。Vaadin:在表中显示一个列表
例如:
class Person {
String name;
String age;
List<Rule> rules;
}
,我希望得到的结果:
|name |age |rules
alex 22 administrator, user, etc..
其中管理员和用户属于Rule.name财产
有谁知道该怎么做?
您应该可以根据需要添加生成的列并根据列表格式设置列表中的值。你可以找到一个例子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;
}
}
这是我得到:
是否使用Vaadin 7 ?如果是,则使用转换器。 A转换器是一个接口,转换为数据源(在你的情况下,集合)到表示(在你的情况下,字符串)之间的值。在vaadin 7中没有任何内置的集合< - >字符串转换器,但自己实现它是微不足道的。一旦你已经实现了转换器,你可以通过调用table.setConverter(propertyId,converter)将它应用到列上;
转换器对列生成器的好处是:1)仍然可以根据该列进行排序/过滤2)不需要返回组件,而只需一个字符串。这会创建更少的开销和较轻的DOM结构,使浏览器呈现更快。
非常感谢,它的作品:) – Alessandro
很高兴帮助。我认为你可以避免设置可见列,如果你使用生成列的id作为Vaadin从bean创建的同一个列:'table_1.addGeneratedColumn(“rules”,new RuleGenerator());'。查看更新的示例 – Morfic