我尝试在谷歌应用引擎(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
答案 0 :(得分:1)
如果您熟悉JPA,可以尝试一下。 在GAE测试过它并且分页工作。 我认为他们现在支持JPA 1.0。
我尝试的是,创建了一个Employee实体。 创建了DAO层并保留了少数员工实体。
要进行分页提取,请执行以下操作:
Query query = em.createQuery("select e from Employee e");
query.setFirstResult(0);
query.setMaxResults(2);
List<Employee> resultList = query.getResultList();
(在这个例子中,我们得到第一页有2个实体。参数为 setFirstResult将是起始索引,而setMaxResult的参数将是你的页面大小)
您可以轻松地将参数更改为query.setFirstResult和setMaxResults 并围绕它有一个分页逻辑。
希望这有帮助,
此致