Данные соответствия GWT RPC для CellTable - PullRequest
1 голос
/ 14 марта 2012

У меня есть проект GWT 2.4, использующий CellTable. У него есть такие столбцы (на самом деле больше):

LastName --- FirstName --- Departments
Smith        Tom           Research, Management

Имена, которые я получаю от объекта «Пользователь», который создается на сервере из моей базы данных.

БД выглядит так:

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();
        }
    };

Но так как отделы не хранятся в объекте «Пользователь», я понятия не имею, как получить их в правильном столбце и строке.

Надеюсь, я достаточно хорошо объяснил мою проблему, чтобы вы поняли:)

Ответы [ 2 ]

0 голосов
/ 14 марта 2012

В дополнение к первому ответу: поскольку CellTable параметризован для отображения списка объектов данного типа в его строках, этот объект должен включать имя пользователя, а также список отделов. Вам нужно будет каким-то образом сделать эти данные доступными через объект User или создать новую (например, UserDepartmentDTO) в качестве элементов базовой модели.

0 голосов
/ 14 марта 2012

Предполагая, что у вашего User объекта есть список отделов, например:

public ArrayList<Department> 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();
    }
};
...