2011-10-19 10 views
6

¿Alguien puede proporcionar alguna idea/lógica para escribir la lógica de paginación para la página de búsqueda en la que estoy trabajando? La información que tengo es número total de páginas para esa búsqueda- 10 registros por página también me han enviado tanto el número de página anterior como el siguiente (no hay problema escribiendo la lógica, todo lo que necesito hacer es extraer esa información y poblar. yo también estoy recibiendo la información de la página que estoy en. Sólo puedo mostrar 10 páginas como continuaciónCómo escribir la lógica de paginación?

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

Di si las páginas en total son 15 y cuando el usuario haga clic en siguiente y tengo que mostrar como esto

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

En cualquier momento solo necesito para mostrar luego 10 páginas en la paginación.

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

que he hecho esto antes. Sin embargo, sería útil ver su código ... – Alex

+0

La forma en que está codificado ahora es que $ searchTO.getPagination(). GetDirectPageLinks() obtiene todos los enlaces a las páginas. si tengo 50 páginas, entonces está mostrando todo – pushya

+0

¿Qué marco de persistencia estás usando? – Atticus

Respuesta

9

Aquí es cómo iba a ponerlo en práctica: Es generalmente una buena idea para crear una clase de filtro que filtra los datos y contiene información relacionada con la paginación para usted. Puedo usar algo como esto:

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

} 

Usted podría tener subclases especiales de filtros (dependiendo de lo que desea recuperar) y cada subclase y pondría en práctica es createCountQuery() y createQuery().

Ponería entonces su Filter en el contexto Velocity y podría recuperar toda la información que necesita de esta clase.

Cuando configura el curso pf de la página actual, actualiza toda la demás información que necesita (por ejemplo, currentStartPageNo, currentEndPageNo).

También podría tener un método refresh() para volver a poner el filtro en su estado inicial.

Y, por supuesto, debe mantener la instancia del mismo filtro en la sesión (me refiero al framework web como Struts, Turbine, etc.) mientras el usuario navega en la página de búsqueda a la que pertenece Filter.

Esto es solo una pauta, una idea, no es un código ejecutable completamente escrito, solo un ejemplo para empezar en una dirección.

También le recomendaría un plugin jQuery llamado jqGrid que tiene soporte de paginación (aunque debe tener una copia de seguridad para recuperar datos) y mucho más cosas interesantes. Puede usarlo para mostrar sus datos en una cuadrícula. Lo uso junto con Velocity sin ningún problema. Tiene muchas funciones muy útiles y útiles como la barra de herramientas de filtro, celdas editables, transferencia de datos en JSON, XML, etc. Honestamente, no sé si tiene la paginación que necesita (la uso solo con una página que se muestra en navegación y no puede hacer clic en una página solo use los botones de la próxima a para navegar), pero puede ser compatible con eso.

1

remitir esta cuestión existente: Pagination in Java

Otra paginación usando JPanel, modificar esto de acuerdo con su código.

Los conceptos de paginación son los mismos para todos los idiomas y la implementación del código requiere pequeñas modificaciones de bit basadas en los idiomas.

Java Pagination

Consulte una más pregunta existente para más información:

pagination in java?

Otros URL de sitios externos: -

2

Paginación del lado del servidorPara mostrar todos los datos en una sola página, divida en partes para atraer la atención de los usuarios. Estoy usando display-tag (Para usar esta mantener un campo en clase POJO para mirar todos los datos de registros)

<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" %>