我想显示我网站中所有用户的列表,但我只希望每个年龄段显示10个人。我不知道怎么做到这一点。我知道如何通过在一个页面中显示所有用户来实现它,但这不是很好吗?

如果我使用现在的代码执行此操作,它将只会反复获得前十个用户。 我希望能够让所有用户进行一次性查询,将其全局存储,然后在列表中移动,检索下一个10,依此类推以进行显示。

我正在使用Java和Spring Framework开发appengine一些我一直在考虑的解决方案,

  1. 存储在会话中并浏览列表(我猜是非常糟糕)
  2. 将它交给JSP,特别是其中一个范围,页面,请求等。但我认为请求不起作用。
  3. 寻找可以处理此问题的Spring控制器。
有帮助吗?

解决方案

一般来说,你会在你的页面上使用一个名为'page'的表格变量(通过GET或POST),这是一个数字。当您在servlet中收到该值时,您将根据页码和每页配置的行计算一个范围。

查看通过大型数据集进行分页(是的,它是Python但是相同的原则适用)和来自Google的查询和索引 App Engine文档。

其他提示

如果您将页面大小保持在10,那么您可以根据页码检索每个页面的每个年龄组10个用户:

SELECT TOP 10 users FROM myusers 
 WHERE AGE = function(page_number) 
 ORDER BY some_ordering

我希望JPA + appengine支持这种类型的查询。

一些数据库引擎为此提供了方便的SQL扩展。就像在MySQL中你可以说出类似“select ... whatever ... whatever 50,10”的东西,其中“50”和“50”。是要开始的行,10是要检索的行数。然后在您的显示页面上,您只需将下一个和上一个按钮通过相应的起始行号返回到服务器,以便下次运行查询。

如果您使用的SQL引擎没有这样的便利功能,那么您必须构建一个特定于查询的“where”。基于排序顺序的子句。

举一个简单的例子,假设您的示例中按“user_name”顺序显示记录。您可以使用Statement.setMaxRows(10)将任何查询限制为10行。然后在第一次通话时,执行,例如,“按用户名从用户订单中选择......等等......”。保存找到的最后一个user_name。在您的下一个按钮中,您将此user_name传递回服务器,并且下一次调用的查询是“select ... whatever ...来自用户user_name>'xxx'order by user_name",其中'xxx'是上次调用的最后一个user_name。再次执行setMaxRows,这样您再次限制为10行输出。然后,您可以让用户以这种方式逐步完成整个输出。

让用户倒退有点痛苦。我通过将一个表保存在一个会话变量中,并使用每个页面的起始键值来完成它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top