gpt4 book ai didi

displaytag - 为什么显示标签分页不使用部分列表?

转载 作者:行者123 更新时间:2023-12-04 02:11:10 26 4
gpt4 key购买 nike

在显示标签中,我使用了分页功能,当我想查看 15 行的列表但显示标签从数据库中获取所有行时。每次当我点击分页号时,它都会从数据库中获取所有行。因此,它会降低应用程序的性能。

我希望在显示标记中看到 15 行,然后显示标记也从数据库中获取 15 行而不是整个数据库行。如果有人知道,请帮助我。

最佳答案

您必须使用外部分页功能。首先,在 html 标签中指定您正在使用外部分页。并创建一个对象实现 org.displaytag.pagination.PaginatedList。最后,您必须实现 DAO,它实际上只查询 15 行并返回分页列表。

1)你的jsp看起来像这样

<display:table name="command" sort="external" partialList="true" size="${command.fullListSize}" pagesize="${command.objectsPerPage}">
<display:column property="name" title="name"/>
...
</display:table>

请注意,它指定的排序是外部的。

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 实现示例。您可以使用 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;
}

关于displaytag - 为什么显示标签分页不使用部分列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3888367/

26 4 0