如何在Google App Engine(Java)中实现正确的分页?

时间:2015-01-03 18:15:45

标签: java google-app-engine java-ee pagination

我尝试在谷歌应用引擎(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

1 个答案:

答案 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 并围绕它有一个分页逻辑。

希望这有帮助,

此致