Jak napisać logikę paginacji?

Czy ktoś może podać jakiś pomysł/logikę, aby napisać logikę paginacji dla strony wyszukiwania, nad którą pracuję? Informacje, które mam to całkowita liczba stron dla tego wyszukiwania - 10 rekordów na stronę również został wysłany zarówno poprzedni i następny numer strony (nie ma problemu z zapisaniem logiki wszystko, co muszę zrobić, wyciągnąć te informacje i wypełnić. Dostaję również informację, na której stronie Jestem. Mogę wyświetlać tylko 10 stron jak poniżej

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

Powiedzmy, że całkowita liczba stron wynosi 15 i kiedy użytkownik kliknij Dalej, a następnie Wyświetl w ten sposób

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

W każdej chwili muszę tylko pokazać 10 stron w paginacji.

 #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
Author: pushya, 2011-10-19

3 answers

Oto jak bym to zaimplementował: Ogólnie dobrym pomysłem jest stworzenie klasy filtrów, która filtruje dane i zawiera informacje związane z paginacją. Używam czegoś takiego:

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();
     }

}

Możesz mieć specjalne podklasy filtrów (w zależności od tego, co chcesz pobrać) i każda podklasa zaimplementuje to createCountQuery() i createQuery().

Następnie umieścić {[3] } do Velocity kontekstu i można pobrać wszystkie potrzebne informacje z tego klasy.

Po ustawieniu bieżącej strony kursu pf aktualizujesz wszystkie inne potrzebne informacje(np. currentStartPageNo, currentEndPageNo).

Możesz również mieć metodę refresh(), aby przywrócić filtr do stanu początkowego.

I oczywiście należy zachować instancję tego samego filtra na sesji(mam na myśli web framework jak Struts, Turbine itp.) podczas gdy użytkownik przechodzi na stronę wyszukiwania, do której należy Filter.

To jest tylko guideline, pomysł, to nie jest w pełni napisany kod wykonywalny, tylko przykład, aby zacząć w kierunku.

Polecam również wtyczkę jQuery o nazwie jqGrid, która ma obsługę paginacji (chociaż musisz mieć kopię zapasową, aby pobrać dane) i wiele innych fajnych rzeczy. Można go używać do wyświetlania danych w siatce. Używam go razem z Velocity bez problemu. Posiada wiele bardzo miłych i przydatnych funkcji, takich jak filtr toolbar, edytowalne komórki, transfer danych w JSON, XML itd. Szczerze mówiąc, Nie wiem, czy ma paginację, jakiej potrzebujesz (używam jej tylko z jedną stroną wyświetlaną w nawigacji i nie możesz kliknąć strony, po prostu użyj przycisków next a prev do nawigacji), ale może mieć wsparcie dla tego.

 9
Author: Atticus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-19 14:05:32

Paginacja po stronie serwera Aby wyświetlić wszystkie dane na jednej stronie, Podziel Na części, aby przyciągnąć uwagę użytkowników. Używam display-tag (aby użyć tego zachowania jednego pola w klasie POJO do obserwowania wszystkich rekordów danych)

<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" %>
 2
Author: Yash,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-18 08:51:28

Skieruj to istniejące pytanie: paginacja w Javie

Kolejna stronicowanie za pomocą JPanel, zmodyfikuj to zgodnie z Twoim kodem.

Koncepcje paginacji pozostają takie same dla wszystkich języków, a implementacja kodu wymaga niewielkiej modyfikacji opartej na językach.

Paginacja Java

Zobacz jeszcze jedno istniejące pytanie, aby uzyskać więcej informacji:

Paginacja w Javie?

Inne strony zewnętrzne Url: -

 1
Author: Siva Charan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:30:50