【发布时间】:2015-01-03 18:15:44
【问题描述】:
我尝试在谷歌应用引擎(Java)中实现分页,但我无法实现。只能进行正向分页,不能实现反向分页。
我尝试通过 HTTP 请求存储之前的光标值,如下所示:
JSP 文件:
<a href='/myServlet?previousCursor=${previousCursor}'>Previous page</a>
<a href='/myServlet?nextCursor=${nextCursor}'>Next page</a>
Servlet 文件:
String previousCursor = req.getParameter("previousCursor");
String nextCursor = req.getParameter("nextCursor");
String startCursor = null;
if(previousCursor != null){
startCursor = previousCursor;
}
if(nextCursor != null){
startCursor = nextCursor;
}
int pageSize = 3;
FetchOptions fetchOptions = FetchOptions.Builder.withLimit(pageSize);
if (startCursor != null) {
fetchOptions.startCursor(Cursor.fromWebSafeString(startCursor));
}
Query q = new Query("MyQuery");
PreparedQuery pq = datastore.prepare(q);
QueryResultList<Entity> results = pq.asQueryResultList(fetchOptions);
for (Entity entity : results) {
//Get the properties from the entity
}
String endCursor = results.getCursor().toWebSafeString();
req.setAttribute("previousCursor", startCursor);
req.setAttribute("nextCursor", endCursor);
有了这个我可以保留之前的光标值,但不幸的是之前的光标似乎是无效的。
我也尝试过使用 reverse() 方法,但是没有用。它的工作原理与转发相同。
那么有什么方法可以在谷歌应用引擎(Java)中实现正确的分页(前进和后退)?
我发现了类似的,发布于 2010 年。这里的答案也是使用 Cursor。但正如我上面显示的那样,它不起作用。 Pagination in Google App Engine with Java
【问题讨论】:
-
另一个答案是使用 Python,但想法保持不变。
-
@Lipis,同样的想法并不意味着“重复 Q”——不熟悉 Python 的 Java 程序员将很难将代码翻译成他/她最喜欢的语言,所以这个 Q 应该是单独留下(并回答,但我的 Java 还不够好:-)。
-
@AlexMartelli 很公平......我删除了重复的问题链接,是的......我的 Java 也不是这个领域最强大的,可以进一步帮助:) (P.S. 欢迎回到 SO.. 我们想念你:)
-
类似的问题,但可以在此处找到以 Python 方式解决的问题:stackoverflow.com/questions/17975070/…
-
是的,这些都在 python 中。但是在java中却无法实现。我认为我们可以通过索引来做到这一点,但不确定。还没人回答呢,还是自己通过索引试试吧
标签: java google-app-engine jakarta-ee pagination