Dans la balise d'affichage I Utilisé la fonctionnalité de pagination, lorsque je souhaite voir la liste de 15 lignes, mais la balise d'affichage récupère toutes les lignes de la base de données. Chaque fois que je clique sur le numéro de pagination, il récupère toutes les lignes de DB. En raison de cela, il ralentit la performance de l'application. p>
Je souhaite que dans l'étiquette d'affichage lorsque je souhaite voir les 15 lignes, la balise d'affichage est également extraite 15 rangées de DB ne sont pas entières de lignes de DB. Aidez-moi s'il vous plaît si quelqu'un le sait. p>
3 Réponses :
Vous devez utiliser une fonctionnalité de pagination externe. Tout d'abord, spécifiez dans la balise HTML que vous utilisez une pagination externe. Et créer un objet implémente org.displaytag.pagination.paginé.paginé em>. Enfin, vous devez mettre en œuvre le DAO qui fait réellement interroger uniquement pendant 15 rangées et renvoie la paginélist. 1) Votre JSP ressemblera à ce p> Notez qu'il est spécifié Le tri est externe. p> 2) org.displaytag.pagination.pagination.PaginéListListListListListListListListListList. p> @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;
}
DisplayTag envoie des données de pagination et de tri en utilisant des paramètres commençant par "D-". Une solution si rapide peut être de vérifier si la demande contient quelque chose en commençant par "D -", si oui, n'exécutez pas à nouveau votre requête. P>
Pour une raison quelconque en utilisant le L'option que j'ai enfin utilisée est de stocker les données de la session. Lorsque l'utilisateur clique sur le prochain, il vérifie les données de la session. Si tel est présent, il ne frappera pas la couche de services. Jusqu'à présent, ça a fonctionné bien. P> paginélist code> ne semblait pas fonctionner. J'ai essayé avec la dernière version et il semble qu'il y ait un bogue et il donne la taille d'attribut d'erreur
doit être spécifié code> même si je code dure la valeur de la taille. J'ai traversé d'autres liens / blogs et beaucoup de gens l'ont signalé. p>
On dirait que vous êtes l'affiche originale - vous êtes peut-être enregistré maintenant. Si oui, pourriez-vous clarifier? Sinon, veuillez modifier pour dire "ne semble pas fonctionner" au lieu de "ne semblant pas fonctionner".
Il se pourrait que votre liste de résultats soit nulle.