【问题标题】:Pagination Thymeleaf 3.0 Spring MVC分页 Thymeleaf 3.0 Spring MVC
【发布时间】:2017-06-17 13:14:53
【问题描述】:

我想使用 Spring PagingAndSortingRepository DAO 找到 Thymeleaf 分页的完整解决方案。我得到了部分解决方案,但我无法获得最终解决方案。我认为作为代码片段对其他人来说会很有趣,所以我会要求整个事情。我在网上找不到解决方案,这对我来说有点奇怪(因为我认为这可能是一个很常见的问题)。

最终的解决方案应该像谷歌的分页一样:只有在有意义的情况下两边都有箭头;最多 10 个数字(例如),当您单击向右箭头时,它应该从 1..10 --> 11..20 等移动;当你点击 10 时移动到 5..15。就像 google,你知道的。 大小控制每个页面中的项目数量,而不是分页栏中的块或链接的数量。

我在 Spring 中有一个 DAO 存储库,它扩展了 PagingAndSortingRepository ...

包music.bolo.domain.repository;

导入 org.springframework.data.repository.PagingAndSortingRepository; 导入 org.springframework.stereotype.Repository;

导入music.bolo.domain.entity.Announcement;

@Repository 公共接口 AnnouncementDao 扩展 PagingAndSortingRepository {

公告 findFirstByOrderByDateDesc(); }

所以我的服务可以发出请求,每个页面都会获得 totalPageNumbers (http://docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/domain/Page.html)...

private final static int PAGESIZE = 2;

.. .. @Autowired 注解...

  public Page<Announcement> readAnnouncementPage (int pageNumber){
          PageRequest request = new PageRequest(pageNumber-1, PAGESIZE, Sort.Direction.DESC, "date");
          return announcementDao.findAll(request);    }

我的控制器使用数据将所有信息发送到 Thymeleaf

  @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">
		 <!-- <h2>Pagination Centered</h2>-->
		<div class="text-center">
			<ul class="pagination">
				<li><a href="#">&laquo;</a></li>
				<!--<li>&laquo;</li>-->
				<li th:each="i : ${#numbers.sequence( 1, page2th.TotalPages)}">
					<a th:href="@{'/viewannouncements?p='}+${ i }" th:text="${ i }">1</a></li>
				<!--<li>&raquo;</li>-->
				<li><a href="#">&raquo;</a></li>
			</ul>
		</div>
	</div>

【问题讨论】:

  • 您可以在视图中添加支持很好分页且易于实现的数据表
  • 感谢 HitHam,我尝试了 stackoverflow.com/questions/18490820/… 的代码,但我看到的问题是它没有实现 Blocks。也就是说,如果你有 100 页的结果(5000 个链接),你想在 10 个块中显示它们(每个块的大小为 50 个结果),并从块移动到块,这不考虑。
  • Hitham,我无法使其与 Github 示例一起使用,但看起来它使用页面大小(用于每页中的项目数),而不是块大小(用于数量每个分页栏中的页面数)。同样的问题。
  • 感谢 Cralfaro,但我想找到使用分页和排序对象的解决方案。

标签: spring-mvc pagination thymeleaf


【解决方案1】:
<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}}">&lt;&lt;</a>
                <a th:if="${startpage eq 0}" href="javascript:void(0);">&lt;&lt;</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}}">&gt;&gt;</a>
                <a th:if="${(endpage*elementsperpage) le (page2th.TotalElements)}" href="javascript:void(0);"></a>
            </li>



        </ul>
    </div>
</div>

【讨论】:

    【解决方案2】:

    这是一个使用 SpringBootThymeleaf 模板的分页示例,你可以试试。
    这是不言自明的。
    您可以在下面找到指向 GitHub 存储库的链接 - https://github.com/karelp90/control_asp

    【讨论】:

    • 如果您共享某个 repo 的链接,请确保您在此处仅使用英语。这将是每个人的便利。
    猜你喜欢
    • 1970-01-01
    • 2018-11-01
    • 1970-01-01
    • 2018-01-07
    • 2018-06-12
    • 2019-06-28
    • 2017-10-29
    • 1970-01-01
    • 2014-02-28
    相关资源
    最近更新 更多