Вы должны использовать функцию внешнего разбиения на страницы.Сначала укажите в HTML-теге, что вы используете внешнюю нумерацию страниц.И создать объект реализует org.displaytag.pagination.PaginatedList .Наконец, вы должны реализовать DAO, который на самом деле делает запрос только для 15 строк и возвращает PaginatedList.
1) Ваш jsp будет выглядеть следующим образом
<display:table name="command" sort="external" partialList="true" size="${command.fullListSize}" pagesize="${command.objectsPerPage}">
<display:column property="name" title="name"/>
...
</display:table>
Обратите внимание, что он определил сортировкуexternal.
2) Реализация org.displaytag.pagination.PaginatedList.
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 с использованием hibernate.Вы можете сделать это с помощью JDBC или чего угодно, но убедитесь, что вы делаете правильный запрос, чтобы получить 15 строк в правильном порядке и вернуть объект 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;
}