决定在没有SQL的情况下对书籍列表进行分页的策略

时间:2010-09-14 16:15:44

标签: java pagination arraylist

我根据用户偏好,根据价格或客户评价,从不同的ArrayList中提取Book Merchant并按Java排序:

List<Book> books = new ArrayList<Book>();

这要求我始终将大量数据保存在作为Java对象存储的内存中。现在我需要将这些数据分页到跨多个网页的列表中,并允许用户点击编号的页面链接以跳转到该段数据,这是最好的方法吗?

我的想法是每页可能 25个图书清单而不是使用提交表单数据的超链接作为URL参数的GET请求,页码超链接只需重新提交表单,将请求的页码作为附加表单POST参数传递。

<input type="hidden" id="pageNumber" value="0">
<a href="#" onClick="pageNumber=5; this.form.submit()">Page 5</a>

在这种情况下,第5页只是一组25条记录,从ArrayList的第125(5 * 25)条记录开始,到ArrayList的第149条记录结束。

有更好的方法吗?

4 个答案:

答案 0 :(得分:3)

重构您的应用程序,例如Hibernate从底层数据库中提取数据。

Hibernate可以进行所有排序和分页,而无需始终将其全部保存在内存中。

答案 1 :(得分:1)

IMO请求是一个GET或POST不应该有太大的区别,所以我会说你做什么漂浮你的船(屏蔽头来自RESTful rebuttals)。我仍然关注的重要事情是将该列表保留在内存中。从单独的商家中提取它似乎是每次请求页面时不重新检索它的一个好理由,但我个人考虑将这些结果存储在本地数据库中,甚至暂时存储。当你拥有大量并发用户时,将大量数据保存在应用服务器的内存中会产生影响。

答案 2 :(得分:1)

用户通常会查看多少结果页?数据有多大(总数或每条记录)? 这个大列表总是在(静态),还是按查询创建?

您可以在JSON数组中输出(比方说)200,而不是返回包含25个结果的页面,并使用javascript显示n ... n + 24个结果。如果页面上有所有结果,您也可以在那里进行排序。如果您想在显示其他页面时进行用户跟踪(更新广告等),请申请1x1.gif?user = u1&amp; action =。

取决于您的记录大小,流量,用户行为,发送 JSON可能比服务器上生成的html更紧凑,所以你得到

  • 使用的带宽较少
  • 减少对服务器的查询
  • 用户看到更好的响应,因为页面更新更快(并且服务器执行的查询更少)

但您需要做一些分析,看看这是否对您有所帮助。例如,如果超过一半的人总是查看结果的第二页,那么您也可以将第一页结果发送到26-50。

另一方面,如果没有人看过第3页,你不会想要发送500个结果。除非你想要夸大你的流量数字。或者你可以做一些动态的事情,比如在可用带宽较少时发送较小的页面。上帝,我们生活在原始时代。

答案 3 :(得分:0)

我有一个开源库来处理Java Web应用程序中的分页问题。这是链接:

http://www.hdpagination.org

您可以选择考虑。

如果您有任何疑问,请随时提出。