2011-02-11 84 views
6

我的GWT应用程序有十种不同类型的实体。现在我使用普通的旧DTO并通过GWT-RPC传输它们。这适用于像启动一样的情况 - 我可以将它们全部打包成一个请求。GWT RequestFactory和多种类型

我正在考虑切换到RequestFactory,因为在我需要更新一种类型的实体时,应用程序的整个生命周期内(有30分钟的平均时间)有很多次,并且统一/带宽节省功能RequestFactory很有吸引力。但是:当应用程序加载时,我看不到在单个请求中下载所有初始化数据的方法。我不想提出十个请求来获取我的十个实体类型的所有init数据。

有没有办法使一个GeneralRequestContext,或什么?我甚至很高兴与像一个解决方案:

public interface InitDataProxy extends EntityProxy 
{ 
    public UserProxy getInitUsers(); 
    public OrganizationProxy getInitOrganizations(); 
    ... 
} 

public interface GeneralRequestContext extends RequestContext 
{ 
    Request<InitDataProxy> getInitData(); 
} 

但是,这将无法工作,因为我不希望有真正回到InitDataProxy任何事情,我只是想用它来一堆的结合不同类型的代理在一个请求中。

因此:有没有办法在单个请求中接收多个不相关的EntityProxy类型?

我也很高兴做出一个正常的gwt-rpc请求去这个数据的RequestFactory之外,但我不想实现重复的DTO来运行旁边的RequestFactory的代理,并编写自定义代码将DTO复制到它们中!

回答

4

InitDataProxy可能会扩展ValueProxy而不需要服务器上的对象具有任何种类的id或版本语义。域端InitData类型可能是一个接口,可能使用匿名类型实现。

interface InitData { 
    User getUser(); 
    Organization getOrgatization(); 
} 
class InitService { 
    static InitData makeInitData() { 
    return new InitData() { ..... }; 
    } 
} 

@ProxyFor(InitData.class) 
interface InitDataProxy extends ValueProxy { 
    UserProxy getUser(); 
    OrganizationProxy getOrganization(); 
} 
@Service(InitService.class) 
interface Init extends RequestContext { 
    Request<InitDataProxy> makeInitData(); 
} 
+0

啊,太好了。谢谢 - 这带来了我和RF之间的突出障碍数量减少到一个,我感觉它也崩溃了!我感谢你的工作! –

+4

RequestContext可以看作是一个“方法调用包”,它允许您在单个HTTP请求中对它们进行批处理。这意味着您不必将结果合并到一个类型中;你可以在RequestContext上调用几个方法,然后fire()将方法调用作为“批处理”发送到服务器。 –

+0

嘿,刚刚看到这个,并会尽快与ValueProxy一起尝试。但是,上次我尝试了ValueProxys(不记得GWT版本)GWT一直抱怨ValueProxy代表的类缺少默认构造函数,并且缺少属性的setter方法。让我们来看看这是否适用于当前版本:) – Gandalf