1

我正在尝试使用 GWTs RequestFactory 来(目前)做一些非常简单的事情并返回一个对象列表,每个对象都包含一些数据和另一个对象。我似乎无法得到我的另一个对象——相反,我总是得到空值。

我的代码看起来像这样......

我有一些 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

每个都有自己的代理类

用户消息代理

@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,我不知道为什么。

我没有收到任何错误或警告。在服务器端,当 RequestFactory 代码调用我的服务类时,我可以“看到” UserMessage 确实包含 Message 对象。

为什么我的对象为空?有没有我不满足的条件?

GWT 2.4 BTW(但在 2.3 中也有问题)

4

1 回答 1

6

您的代码可能缺少.with("message")

查询服务器时,RequestFactory 不会自动填充对象图中的关系。为此,请在请求上使用 with() 方法并将相关属性名称指定为 String
[…]
还需要使用 with() 方法检索具有扩展 ValueProxy 类型的任何属性。with() 方法接受多个 String 参数,因此您可以一次指定多个属性名称。要指定嵌套属性,请使用点表示法。

来源: http ://code.google.com/webtoolkit/doc/latest/DevGuideRequestFactory.html#relationships

于 2011-09-19T16:12:14.187 回答