我正在尝试使用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的问题)
答案 0 :(得分:6)
您的代码可能缺少.with("message")
:
查询服务器时,RequestFactory不会自动填充对象图中的关系。为此,请对请求使用with()方法,并将相关属性名称指定为String [...]
还必须使用with()方法来检索具有扩展ValueProxy的类型的任何属性。 with()方法采用多个String参数,因此您可以一次指定多个属性名称。要指定嵌套属性,请使用点表示法。
- 来源: http://code.google.com/webtoolkit/doc/latest/DevGuideRequestFactory.html#relationships