Spring mvc 分页Thymeleaf 3.0 Spring MVC
我想使用Spring Paging和SortingRepository DAO找到一个完整的Thymeleaf分页解决方案。我得到了一个部分解决方案,但我不能得到最后一个。我认为作为一个代码狙击手,这对其他人来说是很有趣的,所以我会要求所有的东西。我在网上找不到一个对我来说有点奇怪的解决方案(因为我认为这可能是一个很常见的问题) 最终的解决方案应该像谷歌的分页一样:只有在有意义的情况下,两边都有箭头;最大值为10个数字(例如),当单击右箭头时,它应该从1..10-->11..20移动,以此类推;当你点击10时,移动到5..15。就像谷歌一样,你知道。大小控制每页中的项目数,而不是分页栏中的块数或链接数 我在春季有一个DAO存储库,它扩展了分页和排序存储库 包music.bolo.domain.repository 导入org.springframework.data.repository.paging和sortingrepository; 导入org.springframework.stereotype.Repository 导入music.bolo.domain.entity.Announcement @存储库公共接口AnnouncementDao扩展 分页和排序存储库{ 公告findFirstByOrderByDateDesc();} 因此,我的服务可以发出请求,每个页面都将获得总页码() 私有最终静态int PAGESIZE=2 @自动连线批注Spring mvc 分页Thymeleaf 3.0 Spring MVC,spring-mvc,pagination,thymeleaf,Spring Mvc,Pagination,Thymeleaf,我想使用Spring Paging和SortingRepository DAO找到一个完整的Thymeleaf分页解决方案。我得到了一个部分解决方案,但我不能得到最后一个。我认为作为一个代码狙击手,这对其他人来说是很有趣的,所以我会要求所有的东西。我在网上找不到一个对我来说有点奇怪的解决方案(因为我认为这可能是一个很常见的问题) 最终的解决方案应该像谷歌的分页一样:只有在有意义的情况下,两边都有箭头;最大值为10个数字(例如),当单击右箭头时,它应该从1..10-->11..20移动,以此类推;
public Page<Announcement> readAnnouncementPage (int pageNumber){
PageRequest request = new PageRequest(pageNumber-1, PAGESIZE, Sort.Direction.DESC, "date");
return announcementDao.findAll(request); }
公共页面
-
-
-
-
-
-
这是一个使用SpringBoot和Thymeleaf模板分页的示例,您可以试试。这是不言自明的。
下面是GitHub repo的链接-
这是一个使用SpringBoot和Thymeleaf模板分页的示例,您可以试试。
这是不言自明的。
下面是GitHub repo的链接-
您是否尝试了使用Pageable的这种方法,或者您可以将其添加到视图数据表中,这些数据表支持很好的分页,并且易于实现感谢HitHam,我尝试了源代码,但我发现问题是它没有实现块。也就是说,如果您有100页的结果(5000个链接),那么您希望在10个块中显示它们(每个块中的结果大小为50个),并从一个块移动到另一个块,这是不考虑的。Hitham,我无法使用Github exmaple,但它看起来使用的是页面大小(每个页面中的项目数),而不是块大小(用于每个分页栏中的页数)。同样的问题。谢谢Cralfaro,但我想找到一个使用分页和排序对象的解决方案。您是否尝试过使用Pageable的这种方法,或者您可以将其添加到视图数据表中,这些数据表支持非常好的分页,并且易于实现。谢谢HitHam,我尝试了其中的代码,但我看到的问题是它没有实现the Blocks。也就是说,如果你有100页的结果(5000个链接),你想在10个块中显示它们(每个块中有50个结果),并从一个块移动到另一个块,这是不考虑的。Hitham,我无法使用Github exmaple,但它看起来使用了页面大小(每个页面中的项目数),但不是块大小(用于每个分页栏中的页数)。同样的问题。谢谢Cralfaro,但我想找到一个使用分页和排序对象的解决方案。如果您共享指向某个repo的链接,请确保您在那里只使用英语。这对每个人都是方便的。如果您共享指向某个repo的链接,请确保您在那里只使用英语。这将是一个方便每个人。
@RequestMapping(value = "/viewannouncements", method = RequestMethod.GET)
ModelAndView viewAnnouncements(ModelAndView modelAndView, @RequestParam(name = "p", defaultValue = "1") int pageNumber) {
Page<Announcement> page = announcementService.readAnnouncementPage(pageNumber);
modelAndView.getModel().put("page2th", page);
modelAndView.setViewName("viewannouncements");
return modelAndView; }
<div class="tag-box tag-box-v7 text-justify">
<div class="text-center">
<ul class="pagination" th:with="elementsperpage=2, blocksize=10, pages=${page2th.Number}/${elementsperpage}, wholepages=${format.format(pages)},
whole=(${page2th.Number}/${blocksize})+1, wholex=${format.format(whole)}, startnlockpage=${wholepages}*${blocksize+1}, endblockpage=${wholepages}*${blocksize+1},
startpage=${wholex-1}*${blocksize}, endpage=(${wholex}*${blocksize})+1">
<li>
<a th:if="${startpage gt 0}" th:href="@{${'/viewannouncements?p='}+${startpage}}"><<</a>
<a th:if="${startpage eq 0}" href="javascript:void(0);"><<</a>
</li>
<li th:each="pageNo : ${#numbers.sequence(endpage-11, (endpage lt page2th.TotalPages)? endpage-2 : page2th.TotalPages-1)}"
th:class="${page2th.Number eq pageNo}? 'active' : ''">
<a th:if="${page2th.Number eq pageNo}" href="javascript:void(0);">
<span th:text="${pageNo + 1}"></span>
</a>
<a th:if="${not (page2th.Number eq pageNo)}" th:href="@{${'/viewannouncements?p='}+${pageNo+1}}">
<span th:text="${pageNo + 1}"></span>
</a>
</li>
<li>
<a th:if="${(endpage*elementsperpage) le (page2th.TotalElements)}" th:href="@{${'/viewannouncements?p='}+${endpage}}">>></a>
<a th:if="${(endpage*elementsperpage) le (page2th.TotalElements)}" href="javascript:void(0);"></a>
</li>
</ul>
</div>
</div>