研究:Liferay研究(四)Liferay中进行分页-----------------假分页之一
分页大家都不陌生了,分页分为真分页和假分页,真分页原理比较简单,拿Mysql来说的话单纯的一句sql语句末尾带上 limit "+(currentPage-1)*lineSize+","+lineSize 这句话就可以进行真分页查询了,但是工作要求的关系,我接触不到项目里面最底层的数据库语言操作,只是给了一个单纯的方法返回一堆数据,那只能暂时用假分页代替了.
因为分页部分可以循环再用,所以就把分页部分抽取出来了,当做一个工具类使用.代码如下:
package org.lxh.action.pagesplit; import java.util.ArrayList; import java.util.List; import org.lxh.bean.User; public class PageUtil { // // 页面总数 // private int total; // // 当前第几页 // private int curpage; // // 每页显示多少行 // private int linsize; // // 要分多少页 // private int spiltpage; // 是否有上一页 public static boolean isfirst(int curpage) { return curpage != 1; } // 是否有下一页 public static boolean isnext(int curpage, int total) { return curpage != total; } // 是否首页 public static boolean ishomepage(int curpage) { return curpage == 1; } // 是否末页 public static boolean islast(int curpage, int spiltpage) { return curpage == spiltpage; } // 需要分多少页 public static int spiltPage(int total, int linsize) { return (total + linsize - 1) / linsize; } // 计算当前页开始记录 假分页中begin数 public static int countOffset(final int pageSize, final int currentPage) { final int offset = pageSize * (currentPage - 1); return offset; } // 计算假分页中end的结束记录数 public static int countTotalPage(final int pageSize, final int begin) { final int totalPagData = begin + pageSize; return totalPagData; } // 计算当前页 防止一直往下加 public static int countCurrentPage(int curpage) { final int page = (curpage == 0 ? 1 : curpage); return page; } // 可改动分页取数方法 public static List splitPageByUser(List list, int pageSize, int curpage) { System.out.println("pageSize--------------------->" + pageSize); System.out.println("list==>"+list.size()); int begin = countOffset(pageSize, curpage); System.out.println("begin----------->" + begin); int end = countTotalPage(pageSize, begin); System.out.println("end----------->" + end); List temp = new ArrayList(); for (int i = begin; i < end; i++) { System.out.println("i-------------------"+i); if (i <= list.size() - 1) { User user= new User (); user= (User ) list.get(i); if (user== null) continue; else temp.add(user); } } return temp; } }
类中splitPageByListAssetVo方法是为了对接对方项目所返回的值而设置的,可以进行更改,而begin是根据页面当前页返回的数值进行计算,而末尾是begin+上第二次需要显示的数据,但是因为是从list中读取,很容易会出现数组越界的错误.所以必须要对list取数据进行判断.