【问题标题】:Pagination Without Spring Data没有 Spring 数据的分页
【发布时间】:2017-12-20 19:53:58
【问题描述】:

我正在使用 Spring MVC 创建一个 Web 应用程序,但 Spring Data 不支持我的数据库。如何在不使用 Spring Data 的情况下添加分页。我的应用程序有一个表格,其中列出了通过能够检索分页结果的服务检索到的对象(我能够传入页面和结果大小)。当用户按日期范围搜索或在 URL 中放置参数的任何其他搜索时,就会出现问题。我想不出一种方法来为“下一个”和“上一个”链接生成正确的 url。

【问题讨论】:

标签: java spring jpa web


【解决方案1】:

如果 Spring Data 不支持您的数据库,您可以重用 PageImpl 类来包装您的结果,而不是在查询中使用页面数据,只需包装您的搜索结果。

List<T> content = your result set;
Pageable pageable= new PageRequest(int page, int size);
long total = cound found elements;
PageImpl pager = new PageImpl(content,pageable,cound );

在这种情况下,您只需重用类,而无需进行计算。 class PageRequest 有previous(), next() 方法,所以不需要计算。

如果您不想将 spring 数据作为依赖项,您可以复制并放入您需要的项目页面类中。

【讨论】:

  • 我很困惑的是如何在jsp中访问下一个和上一个。好的,以便更全面地解释。我有一个控制器方法来处理默认登陆,从数据库中获取信息,我可以将其添加到模型中以显示在 jsp 中。在我的表格中,我有一个日期范围表格和一个搜索表格。如果用户要选择一个日期范围,那么它会发出这样的请求 /baseurl/daterange?from=somevalue&to=somevalue。因此,为了获得下一页结果,用户将单击下一个链接。问题是我找不到将当前页面参数附加到现有 url 的方法
  • 我调用的服务方法看起来像这样 service.getObjectsByDateRange(from, to, skip, limit) skip 表示要跳过的数据量,limit 是返回的量
  • 您不能更改此服务?举个例子——你有 111 个元素,页面大小 = 5,当前页面 = 10,页面数量 111 / 5 = 13 页。在您的情况下,“从、到、跳过、限制”是什么?
  • " 它发出这样的请求 /baseurl/daterange?from=somevalue&to=somevalue。因此,为了获得下一页结果,用户将单击下一个链接。问题是我找不到一种将当前页面参数附加到现有 url 的方法“——你怎么知道当前页面? -- 如果你有 111 个元素:从 = 50(元素)到 = 55(元素)。你知道页面大小和从,所以你可以计算当前页面,下一页和上一页
  • 检查 PageImpl 源。方法 getTotalPages 和 PageImpl 的构造函数,如果你不能使用 PageImpl 类,你可以找到你需要的逻辑并复制它
猜你喜欢
  • 2015-09-01
  • 1970-01-01
  • 2020-03-04
  • 1970-01-01
  • 1970-01-01
  • 2013-12-20
  • 2020-02-02
  • 1970-01-01
  • 2018-11-03
相关资源
最近更新 更多