我的问题是将组件绑定到Vaadin中的数据。 当使用addnestedpcontainerproperty具有1:1关系的bean时绑定嵌套属性是。
是否可以将属性绑定为One:Many关系。例如,有java类
public class User {
private String name;
private Map<String, String> prop;
public User() { ... }
public addProp(String column, String value) {
prop.put(column, value);
}
}
public class Users {
private List<User> users;
}
我想将Users显示为一个表,例如:Users列表中的每个User对象列为行,prop map的键为表列,map为值的单元格。
public class Users {
private List<User> users;
public Users() {
User user1 = new User("first user");
user1.addProp("p1", "val_b_1");
user1.addProp("p2", "val_b_2");
User user2 = new User("second_user");
user2.addProp("p1", "val_a_1");
user2.addProp("p2", "val_a_2");
users = new HashMap;
users.add(user1);
users.add(user2);
}
}
我希望将其显示为
| p1 | p2 |
----------------------
| val_b_1 | val_b_2 |
| val_a_1 | val_a_2 |
假设用户列表中的每个用户都具有与键相同的值。因此,列数始终是(对于用户列表中的每个用户,对于不同的用户列表,它可能不同)
答案 0 :(得分:1)
请检查Chapter 9. Binding Components to Data的Vaadin book。
一般来说,你做的一切都是正确的,但你的班级用户必须根据Vaading数据模型实现Container接口:
您是否注意到Table构造函数?
// Creates a new table with caption and connect it to a Container.
Table(String caption, Container dataSource)
基本上,容器是一个 项目集,但它对其内容施加了某些限制。 这些约束说明如下:
- 容器中的所有项目必须具有相同数量的属性。
- 容器中的所有项目必须具有相同的属性ID(请参阅
- Item.getItemPropertyIds())。项目中的所有属性对应 相同的属性ID必须具有相同的数据类型。所有项目 容器由其非空ID唯一标识。
您可以使用Array container或任何其他实施来节省时间。
请同时查看Model view controller模式说明。
快乐的编码。