我有一个包含产品和专家的GWT应用程序,一个产品可以有多个专家(OneToMany关系)。我使用两个相关的实体混合和组合请求时遇到了一些麻烦:
ProductProxy如下所示:
@ProxyFor(myapplication.server.domain.Product.class)
public interface ProductProxy extends EntityProxy {
Long getId();
public String getName();
public void setName(String name);
[...]
EntityProxyId<ProductProxy> stableId();
Set<ExpertProxy> getExperts();
}
我有一个可以编辑产品的Dialog,所以它可以:
ProductProxy selectedProduct; // This comes from a function that delivered all products
productRequest = MyAplication.getRequestFactory().productRequest();
this.product = productRequest.edit(selectedProduct);
编辑产品时,您还可以向此产品添加专家:
@ProxyFor(myapplication.server.domain.Expert.class)
public interface ExpertProxy extends EntityProxy {
public Long getId();
public void setId(Long id);
public ProductProxy getProduct();
public void setProduct(ProductProxy product);
[...]
}
我有一个单独的DialogBox出现。在此对话框中,我尝试使用在作为参数传递之前编辑的产品创建专家:
expertRequest = MyApplication.getRequestFactory().expertRequest();
ExpertProxy expert = expertRequest.create(ExpertProxy.class);
expert.setProduct(product); // product comes from the productRequest code
如果我尝试这样做,我在执行 setProduct 时会出错,因为来自productRequest的请求与来自expertRequest的请求混合在一起。
解决此问题的最佳方法是什么?我可以通过原始productRequest添加专家吗?我应该从产品中获取ID并仅在我的专家请求中使用此ID吗?或者我应该添加特定的服务器功能来向产品添加专家?或者有更好的选择吗?
答案 0 :(得分:1)
是的,您应该对所有编辑/创建使用相同的RequestContext
实例。
每个RequestContext
在服务器上累积操作(代理上调用的新代理和设置者)和调用(服务方法调用)重放。这些都是fire()
批量发送的。因此,您必须使用与添加ExpoertProxy
的{{1}}相同的RequestContext
创建ProductProxy
。