2011-11-05 72 views
5

请求方法中是否可以使用泛型?或者如果不是如何解决这个问题?请求工厂通用方法属性

可以说我想实施分页。所以在我的请求界面我有这样的方法:

public List<UserProxy> getUserList(int offset, int limit); 

但列表只返回有限的数据。对于分页执行,我还需要全部元素。在RPC风格,我会使用Result对象:

public MyResultObject<User> getUserList(int offset, int limit) 

where MyResultObject我将List和totalCount存储为属性。不幸的是,在RF中,我无法做到这一点。同样在GWT-RPC中,我可以在一个请求中使用一个方法的命令模式和retrive列表以及另一个方法中的totalcount。

如何在同一时间获取与元素列表totalcount?

回答

3

你可以有一个MyResultObjectProxy(诚然专门针对的userProxy),或者你可以在同一个HTTP批量要求你的两个请求(列表和总数):

MyContext ctx = factory.context(); 
ctx.getUserList(offset, limit).to(new Receiver<List<UserProxy>>() { … }); 
ctx.getUserTotalCount().to(new Receiver<Integer>() { … }); 
ctx.fire(); 

由于GWT 2.4,RF支持多态性,所以也许你可以使用MyResultObjectProxy,它不是专用于特定的EntityProxy(或Value Proxy),尽管我真的不确定它是否真的有效。

+0

因此,你的第一个aproach的作品,但我将不得不编写MyResultObjectProx每个我想要在分页视图中显示的实体。
在我看来,第二个是最好的,但我需要编写两个接收器并将它们同步到一起。实际上,我写了ReceiverManager,但在我看来,它仍然是一种笨拙的方法,使用样板代码。 – kospiotr

+0

第三种选择是最好写不是专用于特定的代理服务器,但它不起作用,因为代理服务器不接受泛型或对象作为列表元素。任何其他想法? – kospiotr

+0

Re。第三个选项:即使你只是简单地使用'List '?或者让所有实体代理扩展相同的基本接口,并使用该接口。当然,你不得不添加强制转换,但这仍然不是样板代码,而是更简单的编译代码。 –