2013-11-12 3 views
1

Я имею трудности понимания того, как мой Service класс должен быть написан для того, чтобы реализовать GXT пагинации с RequestFactoryGXT - RequestFactory интеграция с Paging Сетка

Я последовал пример, приведенный в Demo site, а также javadoc example, данный на веб-сайте Sencha, но не смог полностью понять и то, и другое.

Для начала скажем, что моя службы возвращается List<Data> (Data является POJO сервера), который должен быть загружено в разбитой на страницах моды.

Вот мой сервис класс, который подвергается методе PAGINATION

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); 
      } 

}; 

В приведенном вышеметод, эта линия дает ошибки компиляции

request.fire(receiver); 

потому Receiver, как ожидается, будет

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

Может кто-нибудь, пожалуйста, помогите мне о

  • как я должен реализовать метод обслуживания?
  • Должен ли я вернуть PagingLoadResult вместо List от самого обслуживания? Если да, то как?

Благодарим вас за внимание!

ответ

1

Вам нужна еще одна пара dto-proxy, которая расширяет PagingLoadResultBean/PagingLoadResult.

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) Изменения вам услугу возврата пейджинга боба:

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

4) Также запрашивает изменения:

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

DataProxy Вы используете обратную связь, ваша подкачка будет работать после этих 4 шагов.

+0

Awesome! .. спасибо, что освободили ..Я часто сталкиваюсь с трудностями в понимании сложных контрактов, которые, как ожидается, будут внедрены Sencha. Можете ли вы также указать мне на документы, которые доступны в Интернете относительно того же? – sanbhat

+0

Я бы хотел :( Страница примеров GXT - ваш лучший друг. Если что-то там отсутствует, оно обязательно обсуждалось на официальном форуме или здесь, в stackoverflow. [Официальный блог] (http: //www.sencha. com/blog/category/sencha-gxt) также содержит несколько пояснительных статей и является хорошим местом для начала. –

Смежные вопросы