之前一直用mysql与oracle自带的分页功能进行分页,这次业务需求需要处理很多数据,用数据库自带的分页功能语句处理起来太麻烦而且有些要添加的字段我无法用sql处理,所以我就把处理以后的数据全部装在了一个arrayList<hashMap<String,Object>>中,然后对arrayList进行模拟分页,逻辑就是根据前台拿分页参数的那种逻辑处理的,下面是代码
controller层关键代码:
/*这个是我处理sql数据以后的数据集合,不用管,重点是返回值类型是个arrayList*/
List<HashMap<String, Object>> MonthMorningAndNightDataLists = getList(allData,userList,userORname,date_start,attendanceName,PART_NAME);
/*下面这个是分页功能,参数list就是计算得到的MonthMorningAndNightDataLists,pageSize为每页显示的数据条数 */
private List fenye(List list,int pageSize){
List newList=new ArrayList();
int totalcount=list.size();
int pagecount=0;
int m=totalcount%pageSize;
if(m>0){
pagecount=totalcount/pageSize+1;
}else{
pagecount=totalcount/pageSize;
}
for(int i=1;i<=pagecount;i++){
if(m==0){
List subList= list.subList((i-1)*pageSize,pageSize*(i));
newList.add(subList);
}else{
if (i==pagecount){
List subList= list.subList((i-1)*pageSize,totalcount);
newList.add(subList);
}else{
List subList= list.subList((i-1)*pageSize,pageSize*(i));
newList.add(subList);
}
}
}
return newList;
}
/*总页数*/
int pageCount = fenye(MonthMorningAndNightDataLists, Integer.parseInt(editable_length)).size();
/*总记录数*/
int record_total = MonthMorningAndNightDataLists.size();
/*第一页:*/
分页list.get(0);
/*传到前台的分页集合,page表示当前页,这里得判断当前页和总页数的关系,不然跳转页码会错*/
if(Integer.parseInt(page) < pageCount){
Object pageInfo = fenye(MonthMorningAndNightDataLists, Integer.parseInt(editable_length)).get(Integer.parseInt(page)-1);
model.addAttribute("MonthMorningAndNightDataLists", pageInfo);
}else{
Object pageInfo = fenye(MonthMorningAndNightDataLists, Integer.parseInt(editable_length)).get(pageCount-1);
model.addAttribute("MonthMorningAndNightDataLists", pageInfo);
}
/*存放页数集合:参数page是当前页,如果当前页是1,pageList就存[1,2,3,4,5],如果当前页是2,就存[2,3,4,5,6]*/
List<Integer> pageList = new ArrayList<Integer>();
for (int i = Integer.parseInt(page);;i++) {
if(i<pageCount){
if(i<Integer.parseInt(page)+5){
pageList.add(i);
}else{
break;
}
}else{
break;
}
}
/*另外需要注意一点的是,刚进前台页面的时候page(当前页)与editable_length(每页显示的数据条数)肯定是null值,为了不使上述代码报错,记得要判断赋予初始值*/
String editable_length=request.getParameter("editable_length");//前台获取当前每页显示数据
String page=request.getParameter("page");//当前页数
if(editable_length ==null || editable_length.length()<=0){
editable_length = "10";//默认每页10条记录
}
if(page ==null || "".equals(page) ){
page = "1";//默认是第一页
}
网友评论