2017-01-31 7 views
0

Я бы хотел найти полное решение для разбивки на страницы Thymeleaf с использованием Spring PagingAndSortingRepository DAO. У меня есть частичное решение, но я не могу получить последний. Я думаю, что это было бы интересно для всех остальных как код-снайпер, поэтому я попрошу все это. Я не мог найти решение в Интернете, которое для меня было странным (так как я думаю, что это может быть довольно распространенная проблема).Pagination Thymeleaf 3.0 Spring MVC

Окончательное решение должно вести себя как разбивка на страницы Google: со стрелками с обеих сторон, только если это имеет смысл; с максимальным количеством из 10 чисел (например), и он должен перейти от 1..10 -> 11..20 и т. д., когда вы нажимаете стрелку вправо; и переходите к 5..15, когда вы нажимаете 10. Так же, как google, вы знаете. Размер контролирует количество элементов на каждой странице, а не количество блоков или ссылок в панели разбиения на страницы.

У меня есть хранилище DAO в Spring, которая простирается PagingAndSortingRepository ...

пакет music.bolo.domain.repository;

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

импорт музыки.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) ...

частного конечного статического ИНТ 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; } 

Моего решением является частичным , он показывает все страницы все время, без управления стрелкой (фактически бесполезно) и без какой-либо другой функциональности, но это самое лучшее, что я мог бы сделать 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

Вы можете добавить к вашему представлению данные Таблицы, которые хорошо поддерживают разбиение на страницы и легко реализуются – 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

Это пример пагинацией с SpringBoot и Thymeleaf шаблоны, вы можете попробовать.
Непонятный.
После вы можете найти ссылку на GitHub репо - https://github.com/karelp90/control_asp

see these screenshoots

see these screenshoots

+0

, если вы поделитесь ссылкой на какое-то репо, просто убедитесь, что вы используете там только английский язык. Это будет удобство для всех. –