Как написать логику нумерации страниц? - PullRequest
7 голосов
/ 19 октября 2011

Может ли кто-нибудь предоставить какую-нибудь идею / логику для написания логики разбиения на страницы для страницы поиска, над которой я работаю?У меня есть информация: общее количество страниц для этого поиска - 10 записей на странице также мне отправляют как номер предыдущей, так и следующей страницы (без проблем записываю логику всеМне нужно получить эту информацию и заполнить. Я также получаю информацию о том, на какой странице я нахожусь. Я могу отображать только 10 страниц, как показано ниже

<previous 1 |2 |3 | 4| 5 | 6 | 7 | 8 | 9 | 10 next>

Скажите, если общее количество страниц равно 15, и когда пользователь нажимает кнопку "Далее"тогда мне нужно отобразить вот так

<previous 2 |3 |4 |5 |6 |7 |8 |9 |10 |11 next>

В любое время мне просто нужно показать 10 страниц в нумерации страниц.

 #set($start = 1)
 #set($end = $Integer.parseInt($searchTO.getPagination().getNumberofPages()))
 #set($range = [$start..$end])

#set($iter = 1)
            #foreach($i in $range)
              #foreach($link in $searchTO.getPagination().getDirectPageLinks())
                    #if($i == $iter)
                        #if ($Integer.parseInt($searchTO.getPagination().getPageNumber())==$iter)
                            <a class="search_current" href="/?_page=SEARCH&_action=SEARCH$link">$i &nbsp|</a>
                        #else
                            <a href="/?_page=SEARCH&_action=SEARCH$link">$i &nbsp|</a>
                        #end
                        #set($iter = 1)
                        #break
                    #else
                        #set($iter=$iter+1)
                    #end

                 #end

            #end

Ответы [ 3 ]

10 голосов
/ 19 октября 2011

Вот как я бы это реализовал: как правило, неплохо создать класс Filter, который фильтрует данные и содержит информацию, связанную с разбиением на страницы.Я использую что-то вроде этого:

public abstract class Filter{

     /** Member identifier for the current page number */
     private int currentPageNo;

     /** Member identifier for the current start page number in the page navigation */
     private int currentStartPageNo;

     /** Member identifier for the current end page number in the page navigation */
     private int currentEndPageNo;

     /** Member identifier for the number of elements on a page */
     private int elementsPerPage;

     /** Member identifier for the number of pages you have in the navigation (i.e 2 to  11 or 3 to 12 etc.) */      
     private int pageNumberInNavigation;

     public abstract Query createCountQuery();

     public abstract Query createQuery();

     public void setCurrentPageNo(){
         //Your code here
         //Validation, variable setup
     }

     public Long getAllElementsCount(){
          //Now this depends on the presistence framework you use, this code is
          //just for guidance and has Hibernate-like syntax
          Query query = createCountQuery();
          List list = query.list();
          return !list.isEmpty() && list.get(0) != null ? query.list().get(0) : 0;
     }

     public List getElements(){
          //Now this depends on the presistence framework you use, this code is
          //just for guidance and has Hibernate-like syntax
         Query query = createQuery();
         int from = ((currentPageNo - 1) * elementsPerPage);
         query.setFirstResult(from);
         query.setMaxResults(elementsPerPage);
         //If you use Hibernate, you don't need to worry for null check since if there are no results then an empty collection is returned
         return query.list();
     }

     public List getAllElements(){
         Query query = createQuery();
         return query.list();
     }

     public void refresh(){
         //Your code here
     }

     public List next(){
         //Move to the next page if exists
         setCurrentPageNo(getCurrentPageNo() + 1);
         getElements();
     }

     public List previoius(){
         //Move to the previous page if exists
         setCurrentPageNo(getCurrentPageNo() - 1);
         getElements();
     }

}

У вас могут быть специальные подклассы фильтров (в зависимости от того, что вы хотите получить), и каждый подкласс будет реализовывать это createCountQuery() и createQuery().

Затем вы поместите свой Filter в контекст Velocity и сможете извлечь всю необходимую информацию из этого класса.

Когда вы устанавливаете текущую страницу курса, вы обновляете всю другую информацию, котораявам нужно (т.е. currentStartPageNo, currentEndPageNo).

У вас также может быть метод refresh() для возврата фильтра в исходное состояние.

И, конечно, вы должны сохранять экземпляртот же фильтр в сеансе (я имею в виду ваш веб-фреймворк, такой как Struts, Turbine и т. д.), пока пользователь перемещается по странице поиска, к которой принадлежит Filter.

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

Я бы также порекомендовал вам плагин jQuery с именем jqGrid у него есть поддержка нумерации страниц (хотя для извлечения данных у вас должна быть резервная копия) и много других интересных вещей.Вы можете использовать его для отображения ваших данных в сетке.Я использую его вместе с Velocity без проблем.Он имеет много очень полезных и полезных функций, таких как панель инструментов фильтра, редактируемые ячейки, передача данных в JSON, XML и т. Д. Честно говоря, я не знаю, есть ли у вас нумерация страниц, как вам нужно (я использую только одну страницуотображается в навигации, и вы не можете нажимать на страницу, просто используйте следующие кнопки a a prev для навигации), но она может иметь такую ​​поддержку.

2 голосов
/ 06 июля 2015

Разбивка на стороне сервера Чтобы показать все данные на одной странице, разделите их на части, чтобы привлечь внимание пользователей.Я использую display-tag (Чтобы использовать это, сохраняйте одно поле в классе POJO для просмотра всех записей)

<form:form commandName="empdto" action="" method="post"> 
    <h2 align="center">Employee List</h2>                       
    <display:table id="row_id" export="false"  name="empdto.empList" requestURI="/list.form" pagesize="15" cellpadding="2px;" cellspacing="2px;"  >  <!-- class="its" -->
        <display:column property="id" title="ID" sortable="false"  style="border:1;"  />
        <display:column property="name" title="Name" sortable="true" style="border:1;"   /> <!-- sortProperty="name.firstname" -->
        <display:column property="age" title="Age" sortable="true"  style="border:1;" />
        <display:column property="salary" title="Salary" sortable="true"  style="border:1;" />
        <display:column property="address" title="Address" sortable="true" style="border:1;"  />  <!-- style="width:100px" -->

        <display:column title="Edit">        
            <c:set var="clm_id" value="${row_id.id}" />
            <a href="${pageContext.request.contextPath}/editemp.form?id=${clm_id}" >Edit</a> 
        </display:column>
        <display:column title="Delete">        
            <c:set var="clm_id" value="${row_id.id}" />
            <a href="${pageContext.request.contextPath}/deleteEmp.form?id=${clm_id}" onclick="selectobjID(${clm_id})">Delete </a> 
        </display:column>    
    </display:table>                
</form:form>
<%@taglib uri="http://displaytag.sf.net" prefix="display" %>
1 голос
/ 19 октября 2011

См. Этот существующий вопрос: Пагинация на Java

Еще одна нумерация страниц с использованием JPanel, измените это в соответствии с вашим кодом.

Концепции разбиения на страницы остаются одинаковыми для всех языков, и реализация кода требует небольшой модификации на основе языков.

Пагинация Java

См. Еще один существующий вопрос для получения дополнительной информации:

нумерация страниц в Java?

Другие внешние URL сайта: -

...