我有一个包含产品和专家的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();
}我有一个可以编辑产品的对话框,所以它做的是:
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,并且只在我的专家请求中使用这个?还是应该添加特定的服务器功能来向产品中添加专家?还是有更好的选择?
发布于 2011-10-17 10:55:14
是的,您应该在所有的编辑/创建中使用相同的RequestContext实例。
每个RequestContext累积操作(新的代理和调用代理的setter)和调用(服务方法调用),以便在服务器上重放。所有这些都是在fire()时作为批处理发送的。因此,您的ExpoertProxy必须与添加到的ProductProxy相同的RequestContext创建。
https://stackoverflow.com/questions/7792051
复制相似问题