Java CellTable的GWT RPC匹配数据

Java CellTable的GWT RPC匹配数据,java,database,gwt,rpc,celltable,Java,Database,Gwt,Rpc,Celltable,我有一个使用CellTable的GWT2.4项目。 它有这样的列(实际上更多): 我从服务器上从数据库创建的“用户”对象中获取的名称 数据库如下所示: users: userID firstName lastName departments: departmentID departmentName user_in_department: userID departmentID 那么,让我的部门出现在桌面上的最佳方式是什么 此时,我使用RPC从服务器获取用户列表和

我有一个使用CellTable的GWT2.4项目。 它有这样的列(实际上更多):

我从服务器上从数据库创建的“用户”对象中获取的名称

数据库如下所示:

users:
  userID
  firstName
  lastName

departments:
  departmentID
  departmentName

user_in_department:
  userID
  departmentID
那么,让我的部门出现在桌面上的最佳方式是什么

此时,我使用RPC从服务器获取用户列表和部门列表

我考虑使用第三个RPC来获取用户部门关系,然后将名称与客户机上的用户进行匹配。顺便说一句,有什么好办法能与之相匹配

但是,即使我有与我的用户匹配的部门,我如何将这些信息添加到表中

对于名称,我可以这样做:

    TextColumn<User> firstNameColumn = new TextColumn<User>() {

        @Override
        public String getValue(User object) {
            return object.getFirstName();
        }
    };
TextColumn firstNameColumn=newtextcolumn(){
@凌驾
公共字符串getValue(用户对象){
返回object.getFirstName();
}
};
但是由于部门没有存储在“User”对象中,我不知道如何将它们放在正确的列和行中


我希望我已经很好地解释了我的问题,让您能够理解:)

假设您的
用户对象有这样一个部门列表:

public ArrayList<Department> getDepartments() {
  // ...
}
公共阵列列表getDepartments(){ // ... }
您可以创建列以列出部门,如下所示:

TextColumn<User> departmentsColumn = new TextColumn<User>() {

    @Override
    public String getValue(User object) {
        StringBuilder departments = new StringBuilder();
        for(int i=0; i < object.getDepartments().size(); i++) {
            if (i>0) {
              departments.append(",");
            }
            departments.append(object.getDepartments().get(i).getDepartmentName());
        }
        return departments.toString();
    }
};
TextColumn departmentsColumn=newtextcolumn(){
@凌驾
公共字符串getValue(用户对象){
StringBuilder部门=新建StringBuilder();
对于(int i=0;i0){
部门。附加(“,”);
}
append(object.getDepartments().get(i.getDepartmentName());
}
返回部门。toString();
}
};

除了第一个答案之外:由于CellTable被参数化以在其行中显示给定类型的对象列表,因此该对象应包括用户名和部门列表。您必须以某种方式使该数据通过用户对象可用,或者创建一个新的数据(例如UserDepartmentDTO)作为基础模型中的元素。

好的,那么您还建议将部门列表放入用户对象以解决此问题?当添加这样的信息时,用户对象不会变得越来越重吗?是的,我建议这样做。在检索这样的表格数据时,您应该努力在一次快照中包含显示表所需的信息,而不是多次调用ajax来检索要显示的部分对象。尤其是当用户不需要执行操作来查看数据时。
TextColumn<User> departmentsColumn = new TextColumn<User>() {

    @Override
    public String getValue(User object) {
        StringBuilder departments = new StringBuilder();
        for(int i=0; i < object.getDepartments().size(); i++) {
            if (i>0) {
              departments.append(",");
            }
            departments.append(object.getDepartments().get(i).getDepartmentName());
        }
        return departments.toString();
    }
};