2017-01-31 132 views
0

我想找到一個使用Spring PagingAndSortingRepository DAO的Thymeleaf分頁的完整解決方案。我得到了一個部分解決方案,但我無法獲得最終解決方案。我認爲將其他人作爲代碼snipet會很有趣,所以我會要求整個事情。我在網上找不到解決方案,這對我來說很陌生(因爲我認爲這可能是一個很常見的問題)。分頁Thymeleaf 3.0 Spring MVC

最終的解決方案應該像谷歌的分頁一樣:只有在有意義的情況下雙方都有箭頭;與最多10個數字(例如),它應該從1..10 - > 11..20等等,當你點擊右箭頭;當你點擊10時移動到5..15。就像谷歌,你知道。大小控制每個頁面中的項目數量,而不是分頁欄中的塊或鏈接數量。

我在春天延伸PagingAndSortingRepository一個DAO庫...

包music.bolo.domain.repository;

import org.springframework.data.repository.PagingAndSortingRepository; import org.springframework.stereotype.Repository;

import 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)...

私人最終靜態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; } 

我的解決方法是局部,它一直顯示所有的頁面,沒有箭頭控制(實際上是無用的),沒有任何其他funcionality,但它是我能做的最多的w沒有bug的ork。

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

+0

你嘗試用可分頁https://github.com/mtiger2k/pageableSpringBootDataJPA或此http這個方法:// stackoverflow.com/a/23393348/643500 –

+0

您可以添加到您的視圖dataTables支持相當不錯的分頁和易於實現 – cralfaro

+0

感謝HitHam,我嘗試了代碼從http://stackoverflow.com/questions/18490820/spring- thymeleaf - 如何做 - 實施 - 分頁換一個列表/ 23 393348#23393348但我看到的問題是它沒有實現塊。也就是說,如果您有100頁的結果(5000個鏈接),您希望以10個塊(每個塊中包含50個結果的大小)顯示它們,並且從一個塊移動到另一個塊,這是不考慮的。 – Mike

回答

0
<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

see these screenshoots

see these screenshoots

+0

如果你分享一些回購鏈接,只要確保你在那裏只使用英語。這對每個人都很方便。 –