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.
que he hecho esto antes. Sin embargo, sería útil ver su código ... – Alex
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
¿Qué marco de persistencia estás usando? – Atticus