GWT RequestFactory возвращает нулевой объект - PullRequest
1 голос
/ 19 сентября 2011

Я пытаюсь использовать GWTs RequestFactory, чтобы (на данный момент) сделать что-то очень простое и вернуть список объектов, каждый из которых содержит некоторые данные и другой объект.Кажется, я не могу получить свой другой объект - вместо этого я всегда получаю ноль.

Мой код выглядит примерно так ...

У меня есть несколько объектов UserMessage, каждый из которых включает в себя объект сообщения.

UserMessage

@Entity
public class UserMessage implements Serializable {

  private static final long serialVersionUID = 1L;

  @Id
  @GeneratedValue
  private Long id;

  @Version
  private Integer version = 0;

  @ManyToOne
  @JoinColumn(name = "messageId")
  private Message message;

  private String user;

  private int priority;

  private boolean read;

  private Date expiry;

  private boolean sent;

  ... getter/setters etc

Сообщение

  @Entity(name = "UUMessage")
  public class Message implements Serializable {

  private static final long serialVersionUID = 1L;

  @Id
  @GeneratedValue
  private Long id;

  @Version
  private Integer version = 0;

  private String title;

  private String mimeType;

  private String message;

  private Date received;

  private String fromUser;

  public Message() {

  }

  ... getter/setters etc

каждый со своими прокси-классами

UserMessageProxy

@ProxyFor(value = UserMessage.class, locator = UserMessageLocator.class)
public interface UserMessageProxy extends EntityProxy {

  Long getId();

  void setId(Long id);

  MessageProxy getMessage();

  void setMessage(MessageProxy message);

  String getUser();
}

MessageProxy

@ProxyFor(value = Message.class, locator = MessageLocator.class)
public interface MessageProxy extends EntityProxy {

Long getId();

void setId(Long id);

String getTitle();

void setTitle(String title);

}

У меня есть фабрика и контекст

@Service(value = CentralNotificationService.class, locator = CentralNotificationServiceLocator.class)
public interface CnsRequestContext extends RequestContext {

  Request<List<UserMessageProxy>> getMessagesForUser(String user, int start, int length);

}

Когда я вызываю getMessagesForUser (...) на клиенте вызывается мой сервисный код на стороне сервера, извлекаются записи в базе данных, и я получаю список UserMessageProxy, возвращаемый клиенту.К сожалению, вызывая getMessage () для любого из этих значений, возвращает null, и я не могу понять, почему.

Я не получаю никаких ошибок или предупреждений.На стороне сервера я могу «видеть», что UserMessage содержит объекты Message, когда код RequestFactory вызывает мои классы обслуживания.

Почему мои объекты имеют значение null?Есть ли какие-либо условия, которые меня не удовлетворяют?

GWT 2.4 BTW (но также были проблемы с 2.3)

1 Ответ

6 голосов
/ 19 сентября 2011

Возможно, в вашем коде отсутствует .with("message"):

При запросе к серверу RequestFactory не заполняет автоматически отношения в графе объектов. Для этого используйте метод with () для запроса и укажите имя связанного свойства в виде строки
[...]
Также необходимо использовать метод with () для извлечения любых свойств с типами, расширяющими ValueProxy. Метод with () принимает несколько аргументов String, поэтому вы можете указать несколько имен свойств одновременно. Чтобы указать вложенные свойства, используйте точечную запись.

- Источник: http://code.google.com/webtoolkit/doc/latest/DevGuideRequestFactory.html#relationships

...