在显示标签中我使用了分页功能,当我想查看15行的列表但显示标签时,数据库中的所有行都是.每次当我点击分页编号时,它都会使db.bcoz中的所有行变得迟钝,这会降低应用程序的性能.
我想在显示标签中当我想看到15行然后显示标签也从db而不是整个db行获取15行.如果有人知道,Plz会帮助我.
cha*_*kim 10
您必须使用外部分页功能.首先,在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>
Run Code Online (Sandbox Code Playgroud)
请注意,它指定排序是外部的.
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
...
}
Run Code Online (Sandbox Code Playgroud)
3)使用hibernate的DAO实现示例.你可以使用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;
}
Run Code Online (Sandbox Code Playgroud)