2011-11-05 71 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 '?或者讓所有實體代理擴展相同的基本接口,並使用該接口。當然,你不得不添加強制轉換,但這仍然不是樣板代碼,而是更簡單的編譯代碼。 –