2011-11-05 15 views
5

İstek yöntemlerinde jenerik kullanımı mümkün mü? Ya da bu sorun nasıl çözülmez?Fabrika genel yöntem özellikleri iste

Pagination uygulamak istediğimi söyler. Bu yüzden benim talep arayüzümde şu şekilde bir metodum var:

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

Ancak liste sadece sınırlı veriyi döndürür. Sayfalandırma uygulaması için ayrıca toplam öğeye de ihtiyacım var. RPC tarzında ben Sonucu nesnesini kullanır: MyResultObject I özelliği olarak Listesi ve TOTALCOUNT saklamak istiyorum

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

. Ne yazık ki RF'de bunu yapamam. Ayrıca GWT-RPC'de komut modeli ve geri alma listesini bir yöntemden ve tek bir istekte diğerinden toplam sayımdan kullanabilirim.

Öğe listesiyle aynı anda toplam sayı nasıl alınır?

cevap

3

Bir MyResultObjectProxy (kuşkusuz userProxy için özelleşmiş) olabilir veya aynı HTTP toplu istekte yer alan iki talep (liste ve toplam sayım) yapabilirsiniz:

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

GWT 2.4 beri, RF destekleri polimorfizm, bu yüzden belki de gerçekten çalışacağından emin değilim, belirli bir EntityProxy (veya Değer Proxy'si) için özel olmayan bir MyResultObjectProxy kullanabilirsiniz.

+0

Bu nedenle, köknarlarınızın yaklaşımı işe yarıyor, ancak sayfalandırma sayfasında görüntülemek istediğim her varlık için MyResultObjectProx yazmam gerekiyor.
Benim görüşüme göre ikinci olan en iyisi, ama iki alıcı yazıp bunları senkronize etmem gerekiyor. Aslında bunu yapan ReceiverManager yazdım ama bence baca koduyla hala garip bir yöntem. – kospiotr

+0

Üçüncü seçenek, belirli bir Proxy'ye özel olarak yazılmaması gereken en iyi seçenektir, ancak proxy'ler jenerik veya Nesne olarak liste öğesi kabul etmiyor. Başka fikirlerin var mı? – kospiotr

+0

Re. Üçüncü seçenek: ' 'Listesini kullansanız bile mi? veya tüm varlık proxy'lerinin aynı temel arabirimi genişletmesini ve bu arabirimi kullanmasını sağlayın. Tabaka eklemelisiniz, elbette, ama yine de daha az boilerplate kodu ve daha hafif derlenmiş bir kod. –

İlgili konular