2017-01-31 2 views
0

Ich möchte eine vollständige Lösung für Thymeleaf Paginierung mit Spring PagingAndSortingRepository DAO finden. Ich habe eine Teillösung, die funktioniert, aber ich kann die letzte nicht bekommen. Ich denke, es wäre für alle anderen als Code-Snipet interessant, also werde ich nach der ganzen Sache fragen. Ich konnte im Web keine Lösung finden, die für mich irgendwie seltsam ist (da ich denke, dass es ein ziemlich häufiges Problem sein könnte).Paginierung Thymeleaf 3.0 Spring MVC

Die endgültige Lösung sollte sich wie Google's Paginierung verhalten: mit Pfeilen auf beiden Seiten nur, wenn es Sinn macht; mit einem Maximum von 10 Zahlen (zum Beispiel), und es sollte von 1..10 gehen -> 11..20 usw., wenn Sie den rechten Pfeil klicken; und gehe zu 5..15, wenn du auf 10 klickst. Genau wie Google, weißt du. Die Größe steuert die Anzahl der Elemente auf jeder Seite, nicht die Anzahl der Blöcke oder Verknüpfungen in der Seitenumbruchleiste.

ich ein DAO-Repository im Frühjahr haben die PagingAndSortingRepository ...

Paket music.bolo.domain.repository erstreckt;

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

importieren Sie music.bolo.domain.entity.Announcement;

@Repository public interface AnnouncementDao erstreckt PagingAndSortingRepository {

Announcement findFirstByOrderByDateDesc(); }

So kann mein Dienst eine Anfrage und jede Seite wird den totalPageNumbers (http://docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/domain/Page.html) ...

Privat final static int PAGESIZE = 2 erhalten;

.. .. @Autowired Anmerkungen ...

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

My-Controller die Daten verwendet, alle Informationen zu 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; } 

Meine Lösung ist teilweise zu schicken , es zeigt alle Seiten die ganze Zeit, keine Pfeilkontrolle (eigentlich nutzlos) und ohne irgendeine andere Funktionalität, aber es ist das meiste, was ich machen könnte Ork ohne Fehler.

\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

Haben Sie versucht, diesen Ansatz mit Pageable https://github.com/mtiger2k/pageableSpringBootDataJPA oder einen http: // stackoverflow.com/a/23393348/643500 –

+0

Sie könnten zu Ihrer Ansicht DataTables hinzufügen, die ziemlich gut Paginierung unterstützt und ist einfach zu implementieren – cralfaro

+0

Danke HitHam, habe ich den Code aus http://StackOverflow.com/Questions/18490820/spring- thymeleaf-how-to-pagination-for-a-list/23 393348 # 23393348 aber das Problem, das ich dort sehe, ist, dass es die Blöcke nicht implementiert. Das heißt, wenn Sie 100 Seiten mit Ergebnissen (5000 Links) haben, möchten Sie sie in 10 Blöcken (mit einer Größe von 50 Ergebnissen in jedem Block) zeigen und von Block zu Block ziehen, was nicht berücksichtigt wird. – Mike

Antwort

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

Dies ist ein Beispiel für die Paginierung mit SpringBoot und Thymeleaf Vorlagen können Sie es versuchen.
Es ist selbsterklärend.
Nach Sie Link zu GitHub Repo finden - https://github.com/karelp90/control_asp

see these screenshoots

see these screenshoots

+0

Wenn Sie den Link zu einem Repo freigeben, stellen Sie sicher, dass Sie nur Englisch verwenden. Es wird eine Bequemlichkeit für alle sein. –

Verwandte Themen