Запрос свойств универсального метода фабрики

Можно ли использовать дженерики в методах запроса? Или, если нет, как обойти эту проблему?

Допустим, я хотел бы реализовать разбиение на страницы. Итак, в моем интерфейсе запроса у меня есть такой метод:

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

но список возвращает только ограниченные данные. Для реализации нумерации страниц мне также нужны общие элементы. В стиле RPC я бы использовал объект Result:

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

где в MyResultObject я бы сохранил List и totalCount как свойство. К сожалению, в РФ я не могу этого сделать. Также в GWT-RPC я мог использовать шаблон команд и извлекать список из одного метода и totalcount из другого в одном запросе.

Как получить общее количество со списком элементов одновременно?


person kospiotr    schedule 05.11.2011    source источник


Ответы (1)


У вас может быть 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), хотя я действительно не уверен, что это действительно сработает.

person Thomas Broyer    schedule 05.11.2011
comment
Итак, ваш первый подход работает, но мне пришлось бы написать MyResultObjectProx для каждой сущности, которую я хотел бы отобразить в виде разбивки на страницы. ‹br/› Второй, на мой взгляд, лучший, но мне нужно написать два приемника и синхронизировать их вместе. На самом деле я написал ReceiverManager, который делает это, но, на мой взгляд, это все еще неудобный метод с шаблонным кодом. - person kospiotr; 06.11.2011
comment
Третий вариант лучше всего писать не специализированным для конкретного прокси, но он не работает, так как прокси не принимают дженерики или объекты в качестве элементов списка. Любые другие идеи? - person kospiotr; 06.11.2011
comment
Ре. третий вариант: даже если вы просто используете List<EntityProxy>? или, возможно, сделать так, чтобы все ваши прокси-серверы расширяли один и тот же базовый интерфейс и использовали этот интерфейс. Конечно, вам придется добавить приведения типов, но это по-прежнему меньше шаблонного кода и более легкий скомпилированный код. - person Thomas Broyer; 07.11.2011
comment
Это почти работает. У меня есть следующий прокси: @ProxyFor(value=MyResult.class) public interface MyResultProxy extends ValueProxy{ public List<ValueProxy> getList(); public Integer getTotalCount(); }, но на клиенте я получаю ValueProxy и не могу преобразовать его в UserProxy. - person kospiotr; 07.11.2011
comment
В любом случае спасибо за подсказку с пакетированием. Вероятно, до ошибки code.google.com/p/google -web-toolkit/issues/detail?id=6234 будет исправлено, это единственное работающее решение. Спасибо, Томас. - person kospiotr; 07.11.2011