質問: お世話になっております。 現在GAEでPagination処理をしているのですが、offsetはDatastore Readの回数や、指定できる数値に制限があるのでCursorを使用してPaginationをしようと思っています。 そこで質問なのですが、Cursorは次のページは取得できるのですが、任意のページを取得したい場合、offsetが指定できないのでどのようにすればいいのか困っています。 例えば10ページのコンテンツがあるとして、4ページ目のコンテンツを取得する方法が知りたいです。Cursorを拡張する方法も考えたのですが、filan classのようでできません。 宜しくお願い致します。
回答: bootstrapのページネーションのようなページ番号ボタンを出して直接指定ページにとぶのは処理時間の関係できついですよね。 Cursorのstartとクエリlimitを使ってキーだけのクエリを2回呼べば、前のページと次のページがあるかどうかを判断できますので、次へボタンと前へボタン(活性非活性つき)でのページングは実現できます。 ``` // 現在のページを検索 Query query = ofy().load().type(T.class).order("-created").limit(limit).startAt(cursor); Cursor nextCursor = 現在のページの最後の行のCursor // 前のページを逆順で検索 QueryKeys prevQuery = ofy().load().type(T.class).order("created") .limit(limit).startAt(Cursor.fromWebSafeString(cursor)) .keys(); // 次のページがあるかを検索 ofy().load().type(T.class).order("-created") .startAt(Cursor.fromWebSafeString(nextCursor)).limit(1) .keys().iterator().hasNext() ```