绑定一:Vaadin中的许多数据到组件

时间:2012-11-22 09:57:10

标签: java vaadin

我的问题是将组件绑定到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  |

假设用户列表中的每个用户都具有与键相同的值。因此,列数始终是(对于用户列表中的每个用户,对于不同的用户列表,它可能不同)

1 个答案:

答案 0 :(得分:1)

请检查Chapter 9. Binding Components to DataVaadin book

一般来说,你做的一切都是正确的,但你的班级用户必须根据Vaading数据模型实现Container接口:

enter image description here

您是否注意到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模式说明。

快乐的编码。