我是全新的游标,并具有以下方法:
public List<Venue> findPage(Subject subject, Objectify ofy, int pageSize) {
final Business business = (Business) subject.getSession().getAttribute(BUSINESS_ATTRIBUTE);
final Query<Venue> query = ofy.query(Venue.class).filter(BUSINESS_ATTRIBUTE, business);
final String encodedCursor = (String) subject.getSession().getAttribute(VENUE_CURSOR_CONDITION);
if (encodedCursor != null) {
query.startCursor(Cursor.fromWebSafeString(encodedCursor));
}
final QueryResultIterator<Key<Venue>> iterator = query.fetchKeys().iterator();
final List<Key<Venue>> data = new ArrayList<Key<Venue>>(pageSize);
boolean more = false;
for (int i = 0; i < pageSize && (more = iterator.hasNext()); i++) {
data.add(iterator.next());
}
subject.getSession().setAttribute(VENUE_CURSOR_CONDITION, iterator.getCursor().toWebSafeString());
return get(ofy, data);
}
其中,得到的是下面的方法
public <T> List<T> get(Objectify ofy, List<Key<T>> keys) {
if (keys == null) {
return null;
}
final Map<Key<T>, T> map = ofy.get(keys);
final List<T> list = new ArrayList<T>();
for (T t : map.values()) {
list.add(t);
}
return list;
}
现在,这里是我在做什么现在 - 这是一个小的hackish。 我使用的Apache四郎来跟踪用户会话 - 在用户的会话我保持使用的最后一个光标 - 如果用户导航离开页面我将光标设置为false(很明显 - 这是非常,因为它需要很脆每一个方法都有一个代码无效的最后一个光标)。
现在,这里的地方,我被逮住。 我做了一个简单的界面HasCursor,并打算在它传回用光标列表到客户端 - 唯一的问题是RequestFactory只能处理从服务器传递某些类型的客户 - 这个自定义类型是不是其中之一。 所以,现在与GWT RequestFactory - 有从服务器到客户端传递一个客体光标的好办法?
而且 - 我遇到的另一个问题 - 如果我填充DataGrid与此数据它显示在网格中的数据很好 - 但仅此而已 - 寻呼机1-25说出来的25.所以,我想知道是,你怎么居然告诉DataGrid中有服务器上可用的更多的数据。 我有点困惑,因为它似乎没有适用于此一大堆的文件/例子。
非常感谢你
对于其他人,运行到这个问题,我找到了答案,以它的一个组成部分 - 我忘了所有关于ValueProxies,使您可以映射标准的Java bean从与RequestFactory服务器返回给客户端。
不幸的是,你不能ValueProxies所以我不得不为每个单独的类型ListCursor包装使用泛型。
这里的代理:
@ProxyFor(value = VenueListCursorWrapper.class)
public interface VenueListCursorWrapperProxy extends ValueProxy {
List<VenueProxy> getVenues();
String getCursor();
boolean isMoreAvailable();
void setVenues(List<VenueProxy> venues);
void setCursor(String cursor);
void setMoreAvailable(boolean moreAvailable);
}
和这里的服务器上的更新方法:
public VenueListCursorWrapper findPage(Subject subject, Objectify ofy, int pageSize, String cursor) {
final Business business = (Business) subject.getSession().getAttribute(BUSINESS_ATTRIBUTE);
final Query<Venue> query = ofy.query(Venue.class).filter(BUSINESS_ATTRIBUTE, business);
if (cursor != null) {
query.startCursor(Cursor.fromWebSafeString(cursor));
}
final QueryResultIterator<Key<Venue>> iterator = query.fetchKeys().iterator();
final List<Key<Venue>> data = new ArrayList<Key<Venue>>(pageSize);
boolean more = false;
for (int i = 0; i < pageSize && (more = iterator.hasNext()); i++) {
data.add(iterator.next());
}
return new VenueListCursorWrapper(get(ofy, data), iterator.getCursor().toWebSafeString(), more);
}
所以 - 这是它的一部分 - 有一件事我还没有完全明白如何做的就是寻呼机设置正确 - 我想显示在寻呼机的项目总数,让您可以翻阅它但我不完全知道如何做到这一点,但 - 如果我找到一个解决方案,我将它张贴