GWT RequestFactory возвращает нулевой объект

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

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

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

Сообщение пользователя

@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

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

Прокси-сервер UserMessage

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

Прокси сообщения

@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 вызывает мои классы обслуживания.

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

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


person pillingworth    schedule 19.09.2011    source источник


Ответы (1)


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

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

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

person Thomas Broyer    schedule 19.09.2011