分享

ET Limit方式的分页查询 AJAX AJAX

 funronglei 2006-12-09

1.Limit
默认的情况下eXtremeTable取得所有的结果集然后处理Beans集合,这样的好处是 你可以随意进行排序、过滤和分页操作。
你只需要组装Beans集合并让eXtremeTable知道如何 然而在查询结果较大,可以考虑使用数据库端分页的方案。此时,eXtremeTable
会使用Limit对象向Action/Controller传递PageNo,PageSize,OrderBy等分页信息。而服务端将向EC返回总记录数和当前页的内容。

2.创建Limit

首先你需要通过LimitFactory得到一个Limit实例:


代码
  1. Context context = new HttpServletRequestContext(request);   
  2.       LimitFactory limitFactory = new TableLimitFactory(context);   
  3.       Limit limit = new TableLimit(limitFactory);   

Limit对象定义了limit结果集的所有方法。
TableLimitFactory具有另外一个构造函数,如果JSP页面使用了两个(以上)eXtremeTable的话你可以利用tableId分别传输totalRows,如果默认tableId将为所有ec,。

 

 

Context context = new HttpServletRequestContext(request);
LimitFactory limitFactory = new TableLimitFactory(context, tableId);
Limit limit = new TableLimit(limitFactory);
设置行属性:

limit.setRowAttributes(totalRows, DEFAULT_ROWS_DISPLAYED);

3. 前台jsp页面中ec标莶写法:


代码
  1. <ec:table  
  2.         items="userlist"  
  3.         var="u"  
  4.         action="/pageAction.do"          
  5.         title="后台用户管理——管理用户"  
  6.         retrieveRowsCallback="limit"    
  7.         width="80%"  
  8.         rowsDisplayed="3"  
  9.         form=""  
  10.         >      
  11.         <ec:row>  
  12.             ...   
  13.             ...              
  14.         </ec:row>  
  15.     </ec:table>  

使用callback需要做的唯一事情是传输集合到request,同时传输totalRows属性。 totalRows表示总行数,

 

代码
  1. request.setAttribute("userlist", userlist);   
  2.        request.setAttribute("totalRows"new Integer(总记录数));  

 

 

4.实例:
本实例是ec结合Struts和Hibernate进行分页.

PageAction中的部分代码:

代码
  1. public ActionForward execute(ActionMapping mapping, ActionForm form,   
  2.   HttpServletRequest request, HttpServletResponse response)   
  3.         throws Exception {   
  4.      UserDAO userDAO = (UserDAO) getBean("userDAO");    
  5.      Limit limit = ExtremeTablePage.getLimit(request,defaultPageSize);   
  6.      PageBean page = new PageBean();   
  7.      page.setPageSize(limit.getCurrentRowsDisplayed()); //ec通过limit对象传递pageSize给PageBean   
  8.      page.setPage(limit.getPage());//ec通过limit对象传递pageNo给PageBean   
  9.      List list = userDAO.findAllUser(page);   
  10.      request.setAttribute("userlist", list);   
  11.      request.setAttribute("totalRows"new Integer(page.getCount()));   
  12.        
  13.      return mapping.findForward("userlist");   
  14.      
  15.  }   

Limit对象的实例化在ExtremeTablePage中

 

代码
  1. static public Limit getLimit(HttpServletRequest request,int defaultPageSize) {   
  2.    Context context = new HttpServletRequestContext(request);   
  3.    LimitFactory limitFactory = new TableLimitFactory(context);   
  4.    TableLimit limit = new TableLimit(limitFactory);   
  5.    limit.setRowAttributes(Integer.MAX_VALUE, defaultPageSize);   
  6.    return limit;   
  7.  }   


PageBean类部分代码:

 

代码
  1. public class PageBean {   
  2.       private int count = 0// 记录总数   
  3.       private int pageSize = 10// 每页显示记录数   
  4.           private int pageCount = 0// 总页数   
  5.           private int page = 1// 当前页数   
  6.           .   
  7.           .   
  8.           .   
  9.           public int getCount() {   
  10.              return count;   
  11.          }   
  12.        public void setCount(int count) {   
  13.           if (pageSize != 0) {   
  14.              pageCount = count / pageSize;   
  15.           if (count % pageSize != 0) {   
  16.              pageCount++;   
  17.            }   
  18.        }   
  19.        this.count = count;   
  20.       }   
  21.     
  22.       public int getPage() {   
  23.         return page;   
  24.       }   
  25.      public void setPage(int page) {   
  26.        this.page = page;   
  27.      }   
  28.      public int getPageCount() {   
  29.       return pageCount;   
  30.      }   
  31.      public void setPageCount(int pageCount) {   
  32.        this.pageCount = pageCount;   
  33.     }   
  34.      public int getPageSize() {   
  35.        return pageSize;   
  36.      }   
  37.      public void setPageSize(int pageSize) {   
  38.        this.pageSize = pageSize;   
  39.      }   
  40.   .   
  41.   .   
  42.   .   
  43.  }  
dao层使用PageBean对象进行查询。
 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多