Bạn phải sử dụng tính năng phân trang bên ngoài. Đầu tiên, chỉ định trong thẻ html mà bạn đang sử dụng phân trang bên ngoài. Và tạo một đối tượng triển khai org.displaytag.pagination.PaginatedList. Cuối cùng, bạn phải thực hiện DAO mà thực sự truy vấn cho 15 hàng chỉ và trả về PaginatedList.
1) jsp của bạn sẽ trông như thế này
<display:table name="command" sort="external" partialList="true" size="${command.fullListSize}" pagesize="${command.objectsPerPage}">
<display:column property="name" title="name"/>
...
</display:table>
Lưu ý rằng nó quy định các loại là bên ngoài.
2) triển khai 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 Mẫu triển khai sử dụng ngủ đông. Bạn có thể làm điều đó với JDBC hoặc bất cứ điều gì nhưng chắc chắn rằng bạn đang làm cho các truy vấn đúng để có được 15 hàng theo thứ tự thích hợp và trả về đối tượng 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;
}
nơi để kiểm tra điều này? – Sayan