研究: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取数据进行判断.
posted @ 2010-04-10 20:09  EdwardLau  阅读(956)  评论(0编辑  收藏  举报