2010-10-08 9 views
6

En la etiqueta de visualización utilicé la función de paginación, cuando quiero ver la lista de 15 filas pero mostrar la etiqueta de todas las filas de la base de datos. Cada vez que hago clic en el número de la paginación, se crean todas las filas de db.bcoz, lo que ralentiza la ejecución de la aplicación.Problema de paginación de la etiqueta de visualización

Quiero que en la etiqueta de visualización cuando quiero ver las 15 filas, a continuación, mostrar la etiqueta también buscar 15 filas de db no filas completas de db. Por favor, ayúdame si alguien sabe.

Respuesta

10

Tiene que usar la función de paginación externa. Primero, especifique en la etiqueta html que está usando paginación externa. Y crea un objeto implementa org.displaytag.pagination.PaginatedList. Finalmente, debe implementar DAO, lo que hace que realmente solo busque 15 filas y devuelve PaginatedList.

1) su JSP se verá así

<display:table name="command" sort="external" partialList="true" size="${command.fullListSize}" pagesize="${command.objectsPerPage}"> 
    <display:column property="name" title="name"/> 
    ... 
</display:table> 

nota que especifica el tipo es externo.

2) org.displaytag.pagination.PaginatedList implementación.

public class PaginatedListImpl<T> implements PaginatedList{ 
    private int fullListSize; 
    private int objectsPerPage; 
    private int pageNumber; 
    private String searchId; 
    private String sortCriterion; 
    private SortOrderEnum sortDirection; 
    private List<T> list; 

//getters and setters 
... 
} 

3) DAO Muestra de implementación utilizando hibernate. Puede hacerlo con JDBC o cualquier otra cosa, pero asegúrese de hacer la consulta correcta para obtener 15 filas en el orden correcto y devolver el objeto PaginatedListImpl.

@SuppressWarnings("unchecked") 
public PaginatedListImpl<T> getPaginatedList(PaginatedListImpl paginatedList) { 
    int pageNum = paginatedList.getPageNumber(); 

    final int objectsPerPage = paginatedList.getObjectsPerPage(); 
    final int firstResult = objectsPerPage * pageNum; 
    String sortOrderCriterion = pagiantedList.getSortOrderCriterion(); 
    String sortOrder = paginatedList.getSortOrder 

    String className = type.getName().substring(type.getName().lastIndexOf(".") + 1); 
    final StringBuilder fromClause = new StringBuilder("from " + className + " " + alias); 
    String orderByClause = new StringBuilder(" order by ").append(sortCriterion).append(" ").append(sortDirection); 

    final String hql = new StringBuilder().append(fromClause).append(orderClause).toString(); 
    List<T> resultList = getHibernateTemplate().executeFind(new HibernateCallback() { 
    public Object doInHibernate(Session session) throws HibernateException, SQLException { 
    return session.createQuery(hql) 
     .setFirstResult(firstResult) 
     .setMaxResults(objectsPerPage) 
     .list(); 
    } 
    }); 
    Long count = (Long)getHibernateTemplate().execute(new HibernateCallback() {   
    public Object doInHibernate(Session session) throws HibernateException, SQLException { 
     return session.createQuery("select count(*) " + fromClause).uniqueResult(); 
    } 
    }); 
    paginatedList.setFullListSize(count.intValue()); 
    paginatedList.setList(resultList); 
    paginatedList.setPageNumber(pageNum+1); 
    paginatedList.setObjectsPerPage(objectsPerPage); 
    return paginatedList; 
} 
2

Displaytag envía sus datos de paginación y clasificación usando parámetros que comienzan con "d-". Una solución tan rápida puede ser verificar si la solicitud contiene algo que comienza con "d -", si es así, no ejecute su consulta nuevamente.

+0

dónde comprobar esto? – Sayan

0

Por alguna razón, el PaginatedList no parece funcionar. Intenté con la última versión y parece que hay algún error y da el error attribute size must be specified incluso si codigo el valor del tamaño. Pasé por otros enlaces/blogs y muchas personas lo han señalado.

La opción que finalmente utilicé es almacenar los datos en la sesión. Cuando el usuario hace clic en siguiente, verifica los datos en sesión. Si está presente, no llegará a la capa de servicios. Hasta ahora ha funcionado bien.

+0

Parece que eres el póster original, tal vez te registraste ahora. Si es así, podrías aclarar. Si no, edite para decir "no parece funcionar" en lugar de "no parece funcionar". – AndrewC

+0

Podría ser que su lista de resultados sea nula. – Alex

Cuestiones relacionadas