easyui中datagrid分页问题

要想给datagrid实现分页的效果,那么datagrid必须有这三个属性:

           

    pagination: true,//分页控件,只有为true时才显示分页控件
    pageSize: 15,    //设置每页的条数
    pageList: [10, 15, 30, 50]
 
在给datagrid添加分页时,属性中必须有url属性,否则分页不好使
 
如果datagrid中的数据时通过查询条件后加载的时候,那么需要定义一个全局的url变量值为空,在datagrid的url属性中,赋值这个定义的全局变量。
 
在点击查询按钮时,传递参数重新赋值这个url的变量,在使用reload来加载这个url
 
例如:
前台js:   
$("#seaBtn").click(function () {
    var drugCode = $("#drugCode").combogrid("getValue")
    var classCode = $("#drugClass").combotree("getValue")
    //没有选择类别,则根据药品代码来查询
    if (drugCode != "") {
        //重新加载datagrid的url路径
        url = basePath + "/drug-price/listDrugPriceListOfPage?drugCode=" + drugCode + "&orgId=" + config.org_Id;
        $("#search").datagrid('reload', url);
    } else {
        url = basePath + "/drug-price/listDrugPriceListByCode?classCode=" + classCode + "&orgId=" + config.org_Id;
        $("#search").datagrid('reload', url);
    }
})
后台代码:
@GET
@Path("listDrugPriceListHis")
public PageData listDrugPriceListHis(@Context HttpServletRequest request, @Context HttpServletResponse response) {
    //页面传递的参数
    String orgId = request.getParameter("orgId");
    String drugCode = request.getParameter("drugCode");

    DrugPriceList drugPriceList = new DrugPriceList();
    drugPriceList.setOrgId(orgId);
    drugPriceList.setDrugCode(drugCode);
   
    Page<DrugPriceList> page = drugPriceListServiceApi.listDrugPriceListHis(new Page<DrugPriceList>(request, response), drugPriceList);
    PageData pageData = new PageData();
    pageData.setRows(page.getList());
    pageData.setTotal(page.getCount());
    return pageData;
}
API实现:
public  Page<DrugPriceList>  listDrugPriceListHis(Page<DrugPriceList> drugPriceListPage,DrugPriceList drugPriceList) ;
Service:
public Page<DrugPriceList> listDrugPriceListHis(Page<DrugPriceList> page, DrugPriceList drugPriceList) {
    drugPriceList.setPage(page);
    page.setList(dao.listDrugPriceListHis(drugPriceList));
    return page;
}
需要用到的类:
(1)PageData类: 
      public class PageData<T> implements Serializable{
         private List rows;
         private Long total;
         public PageData() {}
         public List getRows() {
             return rows;}
         public void setRows(List rows) {
             this.rows = rows;}
         public Long getTotal() {
             return total;}
         public void setTotal(Long total) {
             this.total = total;}
      }
(2)Page类:   
/**
 * 分页类
 * @author ThinkGem
 * @version 2013-7-2
 * @param <T>
 */
public class Page<T> implements Serializable {
   
   private int pageNo = 1; // 当前页码
   private int pageSize = Integer.valueOf(15); // 页面大小,设置为“-1”表示不进行分页(分页无效)
   
   private long count;// 总记录数,设置为“-1”表示不查询总数
   
   private int first;// 首页索引
   private int last;// 尾页索引
   private int prev;// 上一页索引
   private int next;// 下一页索引
   
   private boolean firstPage;//是否是第一页
   private boolean lastPage;//是否是最后一页

   private int length = 10;// 显示页面长度
   private int slider = 1;// 前后显示页面长度
   
   private List<T> list = new ArrayList<T>();
   
   private String orderBy = ""; // 标准查询有效, 实例: updatedate desc, name asc

   private String funcName = "page"; // 设置点击页码调用的js函数名称,默认为page,在一页有多个分页对象时使用。
   
   private String funcParam = ""; // 函数的附加参数,第三个参数值。
   
   private String message = ""; // 设置提示消息,显示在n之后

   public Page() {
      this.pageSize = -1;
   }
   
   /**
    * 构造方法
    * @param request 传递 repage 参数,来记住页码
    * @param response 用于设置 Cookie,记住页码
    */
   public Page(HttpServletRequest request, HttpServletResponse response){
      this(request, response, -2);
   }

   /**
    * 构造方法
    * @param request 传递 repage 参数,来记住页码
    * @param response 用于设置 Cookie,记住页码
    * @param defaultPageSize 默认分页大小,如果传递 -1 则为不分页,返回所有数据
    */
   public Page(HttpServletRequest request, HttpServletResponse response, int defaultPageSize){
      // 设置页码参数(传递repage参数,来记住页码)
      String no = request.getParameter("page");
      if (StringUtils.isNumeric(no)){
         CookieUtils.setCookie(response, "page", no);
         this.setPageNo(Integer.parseInt(no));
      }else if (request.getParameter("page")!=null){
         no = CookieUtils.getCookie(request, "page");
         if (StringUtils.isNumeric(no)){
            this.setPageNo(Integer.parseInt(no));
         }
      }
      // 设置页面大小参数(传递repage参数,来记住页码大小)
      String size = request.getParameter("rows");
      if (StringUtils.isNumeric(size)){
         CookieUtils.setCookie(response, "rows", size);
         this.setPageSize(Integer.parseInt(size));
      }else if (request.getParameter("page")!=null){
         no = CookieUtils.getCookie(request, "rows");
         if (StringUtils.isNumeric(size)){
            this.setPageSize(Integer.parseInt(size));
         }
      }else if (defaultPageSize != -2){
         this.pageSize = defaultPageSize;
      }
      // 设置排序参数
      String orderBy = request.getParameter("orderBy");
      if (StringUtils.isNotBlank(orderBy)){
         this.setOrderBy(orderBy);
      }
   }
   
   /**
    * 构造方法
    * @param pageNo 当前页码
    * @param pageSize 分页大小
    */
   public Page(int pageNo, int pageSize) {
      this(pageNo, pageSize, 0);
   }
   
   /**
    * 构造方法
    * @param pageNo 当前页码
    * @param pageSize 分页大小
    * @param count 数据条数
    */
   public Page(int pageNo, int pageSize, long count) {
      this(pageNo, pageSize, count, new ArrayList<T>());
   }
   
   /**
    * 构造方法
    * @param pageNo 当前页码
    * @param pageSize 分页大小
    * @param count 数据条数
    * @param list 本页数据对象列表
    */
   public Page(int pageNo, int pageSize, long count, List<T> list) {
      this.setCount(count);
      this.setPageNo(pageNo);
      this.pageSize = pageSize;
      this.list = list;
   }
   
   /**
    * 初始化参数
    */
   public void initialize(){
            
      //1
      this.first = 1;
      
      this.last = (int)(count / (this.pageSize < 1 ? 20 : this.pageSize) + first - 1);
      
      if (this.count % this.pageSize != 0 || this.last == 0) {
         this.last++;
      }

      if (this.last < this.first) {
         this.last = this.first;
      }
      
      if (this.pageNo <= 1) {
         this.pageNo = this.first;
         this.firstPage=true;
      }

      if (this.pageNo >= this.last) {
         this.pageNo = this.last;
         this.lastPage=true;
      }

      if (this.pageNo < this.last - 1) {
         this.next = this.pageNo + 1;
      } else {
         this.next = this.last;
      }

      if (this.pageNo > 1) {
         this.prev = this.pageNo - 1;
      } else {
         this.prev = this.first;
      }
      
      //2
      if (this.pageNo < this.first) {// 如果当前页小于首页
         this.pageNo = this.first;
      }

      if (this.pageNo > this.last) {// 如果当前页大于尾页
         this.pageNo = this.last;
      }
      
   }
   
   /**
    * 默认输出当前分页标签 
    * <div class="page">${page}</div>
    */
   @Override
   public String toString() {

      StringBuilder sb = new StringBuilder();
      
      if (pageNo == first) {// 如果是首页
         sb.append("<li class=\"disabled\"><a href=\"javascript:\">&#171; 上一页</a></li>\n");
      } else {
         sb.append("<li><a href=\"javascript:\" οnclick=\""+funcName+"("+prev+","+pageSize+",'"+funcParam+"');\">&#171; 上一页</a></li>\n");
      }

      int begin = pageNo - (length / 2);

      if (begin < first) {
         begin = first;
      }

      int end = begin + length - 1;

      if (end >= last) {
         end = last;
         begin = end - length + 1;
         if (begin < first) {
            begin = first;
         }
      }

      if (begin > first) {
         int i = 0;
         for (i = first; i < first + slider && i < begin; i++) {
            sb.append("<li><a href=\"javascript:\" οnclick=\""+funcName+"("+i+","+pageSize+",'"+funcParam+"');\">"
                  + (i + 1 - first) + "</a></li>\n");
         }
         if (i < begin) {
            sb.append("<li class=\"disabled\"><a href=\"javascript:\">...</a></li>\n");
         }
      }

      for (int i = begin; i <= end; i++) {
         if (i == pageNo) {
            sb.append("<li class=\"active\"><a href=\"javascript:\">" + (i + 1 - first)
                  + "</a></li>\n");
         } else {
            sb.append("<li><a href=\"javascript:\" οnclick=\""+funcName+"("+i+","+pageSize+",'"+funcParam+"');\">"
                  + (i + 1 - first) + "</a></li>\n");
         }
      }

      if (last - end > slider) {
         sb.append("<li class=\"disabled\"><a href=\"javascript:\">...</a></li>\n");
         end = last - slider;
      }

      for (int i = end + 1; i <= last; i++) {
         sb.append("<li><a href=\"javascript:\" οnclick=\""+funcName+"("+i+","+pageSize+",'"+funcParam+"');\">"
               + (i + 1 - first) + "</a></li>\n");
      }

      if (pageNo == last) {
         sb.append("<li class=\"disabled\"><a href=\"javascript:\">下一页 &#187;</a></li>\n");
      } else {
         sb.append("<li><a href=\"javascript:\" οnclick=\""+funcName+"("+next+","+pageSize+",'"+funcParam+"');\">"
               + "下一页 &#187;</a></li>\n");
      }

      sb.append("<li class=\"disabled controls\"><a href=\"javascript:\">当前 ");
      sb.append("<input type=\"text\" value=\""+pageNo+"\" οnkeypress=\"var e=window.event||this;var c=e.keyCode||e.which;if(c==13)");
      sb.append(funcName+"(this.value,"+pageSize+",'"+funcParam+"');\" οnclick=\"this.select();\"/> / ");
      sb.append("<input type=\"text\" value=\""+pageSize+"\" οnkeypress=\"var e=window.event||this;var c=e.keyCode||e.which;if(c==13)");
      sb.append(funcName+"("+pageNo+",this.value,'"+funcParam+"');\" οnclick=\"this.select();\"/> 条,");
      sb.append(" " + count + " "+(message!=null?message:"")+"</a></li>\n");

      sb.insert(0,"<ul>\n").append("</ul>\n");
      
      sb.append("<div style=\"clear:both;\"></div>");

//    sb.insert(0,"<div class=\"page\">\n").append("</div>\n");
      
      return sb.toString();
   }
   
   /**
    * 获取分页HTML代码
    * @return
    */
   public String getHtml(){
      return toString();
   }
   
// public static void main(String[] args) {
//    Page<String> p = new Page<String>(3, 3);
//    System.out.println(p);
//    System.out.println("首页:"+p.getFirst());
//    System.out.println("尾页:"+p.getLast());
//    System.out.println("上页:"+p.getPrev());
//    System.out.println("下页:"+p.getNext());
// }

   /**
    * 获取设置总数
    * @return
    */
   public long getCount() {
      return count;
   }

   /**
    * 设置数据总数
    * @param count
    */
   public void setCount(long count) {
      this.count = count;
      if (pageSize >= count){
         pageNo = 1;
      }
   }
   
   /**
    * 获取当前页码
    * @return
    */
   public int getPageNo() {
      return pageNo;
   }
   
   /**
    * 设置当前页码
    * @param pageNo
    */
   public void setPageNo(int pageNo) {
      this.pageNo = pageNo;
   }
   
   /**
    * 获取页面大小
    * @return
    */
   public int getPageSize() {
      return pageSize;
   }

   /**
    * 设置页面大小(最大500    * @param pageSize
    */
   public void setPageSize(int pageSize) {
      this.pageSize = pageSize <= 0 ? 10 : pageSize;// > 500 ? 500 : pageSize;
   }

   /**
    * 首页索引
    * @return
    */

   public int getFirst() {
      return first;
   }

   /**
    * 尾页索引
    * @return
    */

   public int getLast() {
      return last;
   }
   
   /**
    * 获取页面总数
    * @return getLast();
    */

   public int getTotalPage() {
      return getLast();
   }

   /**
    * 是否为第一页
    * @return
    */

   public boolean isFirstPage() {
      return firstPage;
   }

   /**
    * 是否为最后一页
    * @return
    */

   public boolean isLastPage() {
      return lastPage;
   }
   
   /**
    * 上一页索引值
    * @return
    */

   public int getPrev() {
      if (isFirstPage()) {
         return pageNo;
      } else {
         return pageNo - 1;
      }
   }

   /**
    * 下一页索引值
    * @return
    */

   public int getNext() {
      if (isLastPage()) {
         return pageNo;
      } else {
         return pageNo + 1;
      }
   }
   
   /**
    * 获取本页数据对象列表
    * @return List<T>
    */
   public List<T> getList() {
      return list;
   }

   /**
    * 设置本页数据对象列表
    * @param list
    */
   public Page<T> setList(List<T> list) {
      this.list = list;
      initialize();
      return this;
   }

   /**
    * 获取查询排序字符串
    * @return
    */
   public String getOrderBy() {
      // SQL过滤,防止注入 
      String reg = "(?:')|(?:--)|(/\\*(?:.|[\\n\\r])*?\\*/)|"
               + "(\\b(select|update|and|or|delete|insert|trancate|char|into|substr|ascii|declare|exec|count|master|into|drop|execute)\\b)";
      Pattern sqlPattern = Pattern.compile(reg, Pattern.CASE_INSENSITIVE);
      if (sqlPattern.matcher(orderBy).find()) {
         return "";
      }
      return orderBy;
   }

   /**
    * 设置查询排序,标准查询有效, 实例: updatedate desc, name asc
    */
   public void setOrderBy(String orderBy) {
      this.orderBy = orderBy;
   }

   /**
    * 获取点击页码调用的js函数名称
    * function ${page.funcName}(pageNo){location="${ctx}/list-${category.id}${urlSuffix}?pageNo="+i;}
    * @return
    */

   public String getFuncName() {
      return funcName;
   }

   /**
    * 设置点击页码调用的js函数名称,默认为page,在一页有多个分页对象时使用。
    * @param funcName 默认为page
    */
   public void setFuncName(String funcName) {
      this.funcName = funcName;
   }

   /**
    * 获取分页函数的附加参数
    * @return
    */

   public String getFuncParam() {
      return funcParam;
   }

   /**
    * 设置分页函数的附加参数
    * @return
    */
   public void setFuncParam(String funcParam) {
      this.funcParam = funcParam;
   }

   /**
    * 设置提示消息,显示在n之后
    * @param message
    */
   public void setMessage(String message) {
      this.message = message;
   }
   
   /**
    * 分页是否有效
    * @return this.pageSize==-1
    */

   public boolean isDisabled() {
      return this.pageSize==-1;
   }
   
   /**
    * 是否进行总数统计
    * @return this.count==-1
    */

   public boolean isNotCount() {
      return this.count==-1;
   }
   
   /**
    * 获取 Hibernate FirstResult
    */
   public int getFirstResult(){
      int firstResult = (getPageNo() - 1) * getPageSize();
      if (firstResult >= getCount()) {
         firstResult = 0;
      }
      return firstResult;
   }
   /**
    * 获取 Hibernate MaxResults
    */
   public int getMaxResults(){
      return getPageSize();
   }

// /**
//  * 获取 Spring data JPA 分页对象
//  */
// public Pageable getSpringPage(){
//    List<Order> orders = new ArrayList<Order>();
//    if (orderBy!=null){
//       for (String order : StringUtils.split(orderBy, ",")){
//          String[] o = StringUtils.split(order, " ");
//          if (o.length==1){
//             orders.add(new Order(Direction.ASC, o[0]));
//          }else if (o.length==2){
//             if ("DESC".equals(o[1].toUpperCase())){
//                orders.add(new Order(Direction.DESC, o[0]));
//             }else{
//                orders.add(new Order(Direction.ASC, o[0]));
//             }
//          }
//       }
//    }
//    return new PageRequest(this.pageNo - 1, this.pageSize, new Sort(orders));
// }
// 
// /**
//  * 设置 Spring data JPA 分页对象,转换为本系统分页对象
//  */
// public void setSpringPage(org.springframework.data.domain.Page<T> page){
//    this.pageNo = page.getNumber();
//    this.pageSize = page.getSize();
//    this.count = page.getTotalElements();
//    this.list = page.getContent();
// }
   
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值