1

GXT ページネーションを実装するためにServiceクラスをどのように記述する必要があるかを理解するのに苦労していますRequestFactory

デモ サイトで提供されている例と、Sencha Web サイトで提供されている javadoc の例に従いましたが、両方を完全に理解することはできませんでし

まず、ページ分割された方法でロードする必要があるサービスが返されたとしましょうList<Data>(サーバー POJO です)。Data

これは、ページネーション メソッドを公開した Service クラスです。

class BackendService {

   public List<Data> getData(int pageNumber, int pageSize) {
        int f = pageNumber * pageSize;
        int l = f + pageSize;
        if(f > 0 && l < datas.size()) {
            return  datas.subList(f, l);
        }
        return null;
   }
}

RequestFactory見た目はこんな感じ

    @Service(value=BackendService.class, locator=BackendServiceLocator.class)
    interface BackendRequestContext extends RequestContext {

       Request<List<DataProxy>> getData(int pageNumber, int pageSize);

    }

    BackendRequestContext context();
}

ページングは​​次のような実装をGrid期待していますDataProxy

DataProxy<PagingLoadConfig, PagingLoadResult<com.emc.test.client.model.DataProxy>> proxy = new RequestFactoryProxy<PagingLoadConfig, PagingLoadResult<com.emc.test.client.model.DataProxy>>() {

            @Override
            public void load(PagingLoadConfig loadConfig, Receiver<? super PagingLoadResult<com.emc.test.client.model.DataProxy>> receiver) {
                int pageNum = loadConfig.getOffset();
                int pageSize = loadConfig.getLimit();
                Request<List<com.emc.test.client.model.DataProxy>> request = backendRequestFactory.context().getData(pageNum, pageSize);
                request.fire(receiver);
            }

};

上記のload方法では、この行でコンパイルエラーが発生しています

request.fire(receiver);

Receiverと予想されるため

Receiver<? super PagingLoadResult<com.emc.test.client.model.DataProxy>>

誰でも私を助けてくれますか

  • サービスメソッドはどのように実装すればよいですか?
  • サービス自体からPagingLoadResultではなく、戻る必要がありますか? Listはいの場合、どのように?

このスレッドにお時間をいただきありがとうございます。

4

1 に答える 1

1

PagingLoadResultBean/PagingLoadResult を拡張する dto-proxy ペアがもう 1 つ必要です。

1) バックエンド部分で、次の dto を作成しました。

public class YourCustomPagingLoadResultBean extends PagingLoadResultBean<Data> {

  protected YourCustomPagingLoadResultBean () {
  }

  public YourCustomPagingLoadResultBean (List<Data> list, int totalLength, int offset) {
    super(list, totalLength, offset);
  }
}

2) この dto のプロキシを作成します。

@ProxyFor(YourCustomPagingLoadResultBean.class)
public interface YourCustomPagingLoadResultProxy extends ValueProxy, PagingLoadResult<DataProxy> {
  @Override
  List<DataProxy> getData();
}

3) ページング Bean を返すようにサービスを変更します。

public YourCustomPagingLoadResultBean getData(int pageNumber, int pageSize) {
  ...
  return new YourCustomPagingLoadResultBean(list, totalLength, offset);
}

4) 要求も次のように変更されます。

Request<YourCustomPagingLoadResultProxy> getData(int pageNumber, int pageSize);

使用DataProxyしているものは正しいように見えます。ページング グリッドは、これらの 4 つの手順の後に機能します。

于 2013-11-26T14:42:35.680 に答える