显示标签分页问题

ram*_*tel 6 displaytag

在显示标签中我使用了分页功能,当我想查看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)