1

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

我想将用户显示为一个表,例如:用户列表中的每个用户对象作为行,道具映射的键作为表列,映射的值作为单元格。

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  |

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

4

1 回答 1

1

请查看Vaadin 书第 9 章。将组件绑定到数据

一般来说,您做的一切都是正确的,但是您的类Users必须根据 Vaading 数据模型实现 Container 接口:

在此处输入图像描述

你注意到 Table 构造函数了吗?

// Creates a new table with caption and connect it to a Container.
Table(String caption, Container dataSource) 

基本上,容器是一组项目,但它对其内容施加了某些限制。这些约束说明如下:

  • 容器中的所有项目必须具有相同数量的属性。
  • 容器中的所有项目必须具有相同的属性 ID(请参阅
  • Item.getItemPropertyIds())。同一个Property ID 对应的Items 中的所有Properties 必须具有相同的数据类型。容器中的所有项目都由它们的非空 ID 唯一标识。

您可以使用Array 容器或任何其他实现来节省一些时间。

另请查看模型视图控制器模式描述。

快乐编码。

于 2012-12-01T11:27:02.583 回答