GWT RequestFactory返回一个null对象

时间:2011-09-19 15:46:36

标签: java gwt requestfactory

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

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

我有一些UserMessage对象,每个对象都包含一个Message对象。

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,而我无法解决原因。

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

为什么我的对象为空?有什么条件我不满意吗?

GWT 2.4 BTW(但也存在2.3的问题)

1 个答案:

答案 0 :(得分:6)

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

  

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

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