- 论坛徽章:
- 0
|
displaytag 中的分页对于数据量不大来说是很好的,只需要简单的配置就可以做出来强大的功能,但是要注意的是分页链接的编码问题。我们知道的,这样的分页模式在数据量大时,对于性能来说是个问题,毕竟将大量的数据一次性取出来,而用到的只有少数,不是很好的选择,而Hibernate强大的分页功能,对于我们来说再简单不过了,但是却不知道如何2者结合起来使用?
下面就是一个很好的例子:只需要3部。
1) Add partialList="true" size="resultSize" to the display tag in your jsp file like so:
display:table name="collection" cellspacing="0" cellpadding="0" requestURI=""
defaultsort="1" id="c" pagesize="25" partialList="true" size="resultSize" class="list" export="false">
2) Modify your action file by adding a method which gets the page number from the request
public final class DisplayTagAction extends BaseAction {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
if (log.isDebugEnabled()) {
log.debug("Entering 'execute' method");
}
TestDataManager amgr = (TestDataManager) getBean("testDataManager");
//get the page number from request
int page = getPage(request);
int size = 25;
//pass in page and size
request.setAttribute("collection", amgr.getTestData(page, size);
//get the total size of collection , required for display tag to get the pagination to work
request.setAttribute("resultSize", new Integer(amgr.getTestDataSize()));
return mapping.findForward("displayTagPage");
}
public int getPage(HttpServletRequest request){
int page=0;
Enumeration paramNames = request.getParameterNames();
while (paramNames.hasMoreElements()) {
String name = (String)paramNames.nextElement();
if (name != null && name.startsWith("d-") && name.endsWith("-p")) {
String pageValue = request.getParameter(name);
if (pageValue != null) {
page = Integer.parseInt(pageValue)-1;
}
}
}
return page;
}
3) Modify the data access call to return a paginated list.
public List getTestData(int page, int pageSize){
Query query = getSession().createQuery("from Test");
return query.setFirstResult(page * pageSize).setMaxResults(pageSize+1).list();
}
public int getTestDataSize() {
return ((Integer)getSession().createQuery("select count(*) from Test").uniqueResult()).intValue();
}
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/63956/showart_725094.html |
|