Проблема с разбивкой тегов

В теге display я использовал функцию разбивки на страницы, когда я хочу видеть список из 15 строк, но показывать тег, чтобы все строки из базы данных. каждый раз, когда я нажимаю номер страницы, он захватывает все строки из db.bcoz, что замедляет выполнение приложения.

Я хочу, чтобы в отображаемом теге, когда я хочу видеть 15 строк, тогда отображаемый тег также извлекает 15 строк из db не целых строк db. Plz помогите мне, если кто-то знает.

Вы должны использовать функцию внешней разбивки на страницы. Сначала укажите в теге html, что вы используете внешнюю разбивку на страницы. И создать объект реализует org.displaytag.pagination.PaginatedList . Наконец, вы должны реализовать DAO, который делает фактически запрос только для 15 строк и возвращает PaginatedList.

1) Ваш jsp будет выглядеть следующим образом:

  ...  

Обратите внимание, что он указал, что сортировка является внешней.

2) реализация 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) Пример внедрения DAO с использованием спящего режима. Вы можете сделать это с помощью JDBC или всего, но убедитесь, что вы делаете правильный запрос, чтобы получить 15 строк в правильном порядке и вернуть объект 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 отправляет данные разбивки на страницы и сортировку с использованием параметров, начинающихся с «d-». Поэтому быстрое решение может состоять в том, чтобы проверить, содержит ли запрос что-то, начинающееся с «d -», если да, то не выполняйте свой запрос еще раз.

По какой-то причине использование PaginatedList , похоже, не работает. Я попытался с последней версией, и кажется, что есть некоторая ошибка, и это дает attribute size must be specified ошибки, который attribute size must be specified даже если я жестко кодирую значение размера. Я прошел через другие ссылки / блоги, и многие люди это указали.

Опция, которую я, наконец, использовал, – это хранить данные в сеансе. Когда пользователь нажимает кнопку, он проверяет данные в сеансе. Если он присутствует, он не попадет на уровень сервиса. До сих пор он работал нормально.

Давайте будем гением компьютера.