Visualizza il problema di impaginazione dei tag

Nel tag di visualizzazione ho usato la funzione di impaginazione, quando voglio vedere la lista di 15 righe ma mostra il tag featch tutte le righe dal database. ogni volta che clicco sul numero di impaginazione, esegue il featch di tutte le righe da db.bcoz per rallentare l’esecuzione dell’applicazione.

Voglio che nel tag display quando voglio vedere le 15 righe quindi visualizzare tag anche recuperare 15 righe da db non intere righe db. Plz aiutami se qualcuno lo sa.

Devi usare la funzione di impaginazione esterna. Innanzitutto, specifica nel tag html che stai utilizzando l’impaginazione esterna. E crea un object implementa org.displaytag.pagination.PaginatedList . Infine, devi implementare il DAO, che in realtà rende la query solo per 15 righe e restituisce PaginatedList.

1) Il tuo jsp sarà simile a questo

  ...  

Si noti che ha specificato che l’ordinamento è esterno.

2) implementazione org.displaytag.pagination.PaginatedList.

 public class PaginatedListImpl implements PaginatedList{ private int fullListSize; private int objectsPerPage; private int pageNumber; private String searchId; private String sortCriterion; private SortOrderEnum sortDirection; private List list; //getters and setters ... } 

3) Esempio di implementazione DAO utilizzando la sospensione. Puoi farlo con JDBC o altro, ma assicurati di creare la query giusta per ottenere 15 righe nell’ordine corretto e restituire l’object PaginatedListImpl.

 @SuppressWarnings("unchecked") public PaginatedListImpl 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 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; } 

Displaytag invia la paginazione e l’ordinamento dei dati utilizzando i parametri che iniziano con “d-“. La soluzione così rapida può essere quella di verificare se la richiesta contiene qualcosa che inizia con “d -“, se sì, allora non eseguire di nuovo la query.

Per qualche motivo l’uso di PaginatedList non sembra funzionare. Ho provato con la versione più recente e sembra che ci sia un bug e dà la attribute size must be specified errore attribute size must be specified anche se io hard codice il valore della dimensione. Ho attraversato altri link / blog e molte persone lo hanno sottolineato.

L’opzione che ho finalmente usato è quella di memorizzare i dati nella sessione. Quando l’utente fa clic su successivo, controlla i dati nella sessione. Se presente, non colpirà il livello dei servizi. Finora ha funzionato bene.