论坛首页 入门技术论坛

show下我的分页类

浏览 21698 次
该帖已经被评为新手帖
作者 正文
   发表时间:2008-11-18  
勿怪 不过我的确感觉你这么设计非常不好 极高的耦合 极好的维护难度 可读性也比较差 而且直接把请求传入javabean也是非常不好的做法 可能对于你的应用比较好用吧 毋怪
0 请登录后投票
   发表时间:2008-11-18  


import java.io.Serializable;
import java.util.ArrayList;

import org.system.client.core.utils.StringUtils;

/**
 * 分页对象. 包含当前页数据及分页信息如总记录数.
 * 
 */
public class Page implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = -8065871877230151987L;

	private static int DEFAULT_PAGE_SIZE = 8;

	private int pageSize = DEFAULT_PAGE_SIZE; // 每页的记录数

	private long start; // 当前页第一条数据在List中的位置,从0开始

	private Object data; // 当前页中存放的记录,类型一般为List

	private long totalCount; // 总记录数

	private int skipPageNo;

	/**
	 * 构造方法,只构造空页.
	 */
	public Page() {
		this(0, 0, DEFAULT_PAGE_SIZE, new ArrayList());
	}

	/**
	 * 默认构造方法.
	 * 
	 * @param start
	 *            本页数据在数据库中的起始位置
	 * @param totalSize
	 *            数据库中总记录条数
	 * @param pageSize
	 *            本页容量
	 * @param data
	 *            本页包含的数据
	 */
	public Page(long start, long totalSize, int pageSize, Object data) {
		this.pageSize = pageSize;
		this.start = start;
		this.totalCount = totalSize;
		this.data = data;
	}

	/**
	 * @param start
	 * @param pageSize
	 */
	public Page(String start, String pageSize) {
		this(StringUtils.parseInt(start), 0,
				(StringUtils.parseInt(pageSize) == 0 ? DEFAULT_PAGE_SIZE
						: StringUtils.parseInt(pageSize)), new ArrayList());
	}

	/**
	 * 取总记录数.
	 */
	public long getTotalCount() {
		return this.totalCount;
	}

	/**
	 * 取总页数.
	 */
	public long getTotalPageCount() {
		if (totalCount % pageSize == 0)
			return totalCount / pageSize;
		else
			return totalCount / pageSize + 1;
	}

	/**
	 * 取每页数据容量.
	 */
	public int getPageSize() {
		return pageSize;
	}

	/**
	 * 取当前页中的记录.
	 */
	public Object getResult() {
		return data;
	}

	/**
	 * 取该页当前页码,页码从1开始.
	 */
	public long getCurrentPageNo() {
		return start / pageSize + 1;
	}

	/**
	 * 该页是否有下一页.
	 */
	public boolean hasNextPage() {
		return this.getCurrentPageNo() < this.getTotalPageCount() - 1;
	}

	/**
	 * 该页是否有上一页.
	 */
	public boolean hasPreviousPage() {
		return this.getCurrentPageNo() > 1;
	}

	/**
	 * 获取任一页第一条数据在数据集的位置,每页条数使用默认值.
	 * 
	 * @see #getStartOfPage(int,int)
	 */
	protected static int getStartOfPage(int pageNo) {
		return getStartOfPage(pageNo, DEFAULT_PAGE_SIZE);
	}

	/**
	 * 获取任一页第一条数据在数据集的位置.
	 * 
	 * @param pageNo
	 *            从1开始的页号
	 * @param pageSize
	 *            每页记录条数
	 * @return 该页第一条数据
	 */
	public static int getStartOfPage(int pageNo, int pageSize) {
		return (pageNo - 1) * pageSize;
	}

	public int getSkipPageNo() {
		return skipPageNo;
	}

	public void setSkipPageNo(int skipPageNo) {
		this.skipPageNo = skipPageNo;
	}

	public int getStart() {
		return Long.valueOf(start).intValue();
	}

	public void setTotalCount(long totalCount) {
		this.totalCount = totalCount;
	}

	public void setResult(Object data) {
		this.data = data;
	}


}




不知道有人看没!
0 请登录后投票
   发表时间:2008-11-18  
displaytag功能很强大啊,不过好像只能应用在table里把
我们美工最烦用table,啥都用ul

看来要招美工谈谈,table有多好了
What can I do with it?
Actually the display tag library can just... display tables! Give it a list of objects and it will handle column display, sorting, paging, cropping, grouping, exporting, smart linking and decoration of a table in a customizable XHTML style.



0 请登录后投票
   发表时间:2008-11-18  
qianlei007 写道


import java.io.Serializable;
import java.util.ArrayList;

import org.system.client.core.utils.StringUtils;

/**
 * 分页对象. 包含当前页数据及分页信息如总记录数.
 * 
 */
public class Page implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = -8065871877230151987L;

	private static int DEFAULT_PAGE_SIZE = 8;

	private int pageSize = DEFAULT_PAGE_SIZE; // 每页的记录数

	private long start; // 当前页第一条数据在List中的位置,从0开始

	private Object data; // 当前页中存放的记录,类型一般为List

	private long totalCount; // 总记录数

	private int skipPageNo;

	/**
	 * 构造方法,只构造空页.
	 */
	public Page() {
		this(0, 0, DEFAULT_PAGE_SIZE, new ArrayList());
	}

	/**
	 * 默认构造方法.
	 * 
	 * @param start
	 *            本页数据在数据库中的起始位置
	 * @param totalSize
	 *            数据库中总记录条数
	 * @param pageSize
	 *            本页容量
	 * @param data
	 *            本页包含的数据
	 */
	public Page(long start, long totalSize, int pageSize, Object data) {
		this.pageSize = pageSize;
		this.start = start;
		this.totalCount = totalSize;
		this.data = data;
	}

	/**
	 * @param start
	 * @param pageSize
	 */
	public Page(String start, String pageSize) {
		this(StringUtils.parseInt(start), 0,
				(StringUtils.parseInt(pageSize) == 0 ? DEFAULT_PAGE_SIZE
						: StringUtils.parseInt(pageSize)), new ArrayList());
	}

	/**
	 * 取总记录数.
	 */
	public long getTotalCount() {
		return this.totalCount;
	}

	/**
	 * 取总页数.
	 */
	public long getTotalPageCount() {
		if (totalCount % pageSize == 0)
			return totalCount / pageSize;
		else
			return totalCount / pageSize + 1;
	}

	/**
	 * 取每页数据容量.
	 */
	public int getPageSize() {
		return pageSize;
	}

	/**
	 * 取当前页中的记录.
	 */
	public Object getResult() {
		return data;
	}

	/**
	 * 取该页当前页码,页码从1开始.
	 */
	public long getCurrentPageNo() {
		return start / pageSize + 1;
	}

	/**
	 * 该页是否有下一页.
	 */
	public boolean hasNextPage() {
		return this.getCurrentPageNo() < this.getTotalPageCount() - 1;
	}

	/**
	 * 该页是否有上一页.
	 */
	public boolean hasPreviousPage() {
		return this.getCurrentPageNo() > 1;
	}

	/**
	 * 获取任一页第一条数据在数据集的位置,每页条数使用默认值.
	 * 
	 * @see #getStartOfPage(int,int)
	 */
	protected static int getStartOfPage(int pageNo) {
		return getStartOfPage(pageNo, DEFAULT_PAGE_SIZE);
	}

	/**
	 * 获取任一页第一条数据在数据集的位置.
	 * 
	 * @param pageNo
	 *            从1开始的页号
	 * @param pageSize
	 *            每页记录条数
	 * @return 该页第一条数据
	 */
	public static int getStartOfPage(int pageNo, int pageSize) {
		return (pageNo - 1) * pageSize;
	}

	public int getSkipPageNo() {
		return skipPageNo;
	}

	public void setSkipPageNo(int skipPageNo) {
		this.skipPageNo = skipPageNo;
	}

	public int getStart() {
		return Long.valueOf(start).intValue();
	}

	public void setTotalCount(long totalCount) {
		this.totalCount = totalCount;
	}

	public void setResult(Object data) {
		this.data = data;
	}


}




不知道有人看没!


如果把page传给dao层,至少还要增加个属性 sortType  按什么排序
0 请登录后投票
   发表时间:2008-11-18  
写得真烂!
0 请登录后投票
   发表时间:2008-11-18  
把HTML放在action里面写。。。真的很难看啊
0 请登录后投票
   发表时间:2008-11-18  
simon511 写道
qianlei007 写道


import java.io.Serializable;
import java.util.ArrayList;

import org.system.client.core.utils.StringUtils;

/**
 * 分页对象. 包含当前页数据及分页信息如总记录数.
 * 
 */
public class Page implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = -8065871877230151987L;

	private static int DEFAULT_PAGE_SIZE = 8;

	private int pageSize = DEFAULT_PAGE_SIZE; // 每页的记录数

	private long start; // 当前页第一条数据在List中的位置,从0开始

	private Object data; // 当前页中存放的记录,类型一般为List

	private long totalCount; // 总记录数

	private int skipPageNo;

	/**
	 * 构造方法,只构造空页.
	 */
	public Page() {
		this(0, 0, DEFAULT_PAGE_SIZE, new ArrayList());
	}

	/**
	 * 默认构造方法.
	 * 
	 * @param start
	 *            本页数据在数据库中的起始位置
	 * @param totalSize
	 *            数据库中总记录条数
	 * @param pageSize
	 *            本页容量
	 * @param data
	 *            本页包含的数据
	 */
	public Page(long start, long totalSize, int pageSize, Object data) {
		this.pageSize = pageSize;
		this.start = start;
		this.totalCount = totalSize;
		this.data = data;
	}

	/**
	 * @param start
	 * @param pageSize
	 */
	public Page(String start, String pageSize) {
		this(StringUtils.parseInt(start), 0,
				(StringUtils.parseInt(pageSize) == 0 ? DEFAULT_PAGE_SIZE
						: StringUtils.parseInt(pageSize)), new ArrayList());
	}

	/**
	 * 取总记录数.
	 */
	public long getTotalCount() {
		return this.totalCount;
	}

	/**
	 * 取总页数.
	 */
	public long getTotalPageCount() {
		if (totalCount % pageSize == 0)
			return totalCount / pageSize;
		else
			return totalCount / pageSize + 1;
	}

	/**
	 * 取每页数据容量.
	 */
	public int getPageSize() {
		return pageSize;
	}

	/**
	 * 取当前页中的记录.
	 */
	public Object getResult() {
		return data;
	}

	/**
	 * 取该页当前页码,页码从1开始.
	 */
	public long getCurrentPageNo() {
		return start / pageSize + 1;
	}

	/**
	 * 该页是否有下一页.
	 */
	public boolean hasNextPage() {
		return this.getCurrentPageNo() < this.getTotalPageCount() - 1;
	}

	/**
	 * 该页是否有上一页.
	 */
	public boolean hasPreviousPage() {
		return this.getCurrentPageNo() > 1;
	}

	/**
	 * 获取任一页第一条数据在数据集的位置,每页条数使用默认值.
	 * 
	 * @see #getStartOfPage(int,int)
	 */
	protected static int getStartOfPage(int pageNo) {
		return getStartOfPage(pageNo, DEFAULT_PAGE_SIZE);
	}

	/**
	 * 获取任一页第一条数据在数据集的位置.
	 * 
	 * @param pageNo
	 *            从1开始的页号
	 * @param pageSize
	 *            每页记录条数
	 * @return 该页第一条数据
	 */
	public static int getStartOfPage(int pageNo, int pageSize) {
		return (pageNo - 1) * pageSize;
	}

	public int getSkipPageNo() {
		return skipPageNo;
	}

	public void setSkipPageNo(int skipPageNo) {
		this.skipPageNo = skipPageNo;
	}

	public int getStart() {
		return Long.valueOf(start).intValue();
	}

	public void setTotalCount(long totalCount) {
		this.totalCount = totalCount;
	}

	public void setResult(Object data) {
		this.data = data;
	}


}




不知道有人看没!


如果把page传给dao层,至少还要增加个属性 sortType  按什么排序

	public Page pagedQuery(String hql, Page page, Object... values) {
		Assert.hasText(hql);
		// Assert.isTrue(pageNo >= 1, "pageNo should start from 1");
		// Count查询
		String countQueryString = " select count (*) "
				+ removeSelect(removeOrders(hql));
		List countlist = getHibernateTemplate().find(countQueryString, values);
		long totalCount = (Long) countlist.get(0);

		if (totalCount < 1)
			return page;
		// 实际查询返回分页对象
		// int startIndex = Page.getStartOfPage(pageNo, pageSize);
		Query query = createQuery(hql, values);
		List list = query.setFirstResult(page.getStart()).setMaxResults(
				page.getPageSize()).list();
		page.setResult(list);
		page.setTotalCount(totalCount);
		return page;
	}
0 请登录后投票
   发表时间:2008-11-18  
支持一下楼主,给你贴一个我最近写的一个分页:
package org.base;

import java.util.List;
/**
 * 
 * @author Bubble zheshexian@gmail.com
 *
 */
public class Page {

	public final static String CUSTOM="custom";
	public final static String ARRAY="array";
	public final static int SIZE=10;
	public final static int PAGE_ARRAY_LRNGTH=10;
	

	@SuppressWarnings("unchecked")
	private List items;
	private int totalItems;
	private int size=Page.SIZE;
	private int page;
	

	@SuppressWarnings("unused")
	private String action;
	@SuppressWarnings("unused")
	private String form;
	
	private int total;//total pages
	private int pageArrayLength=Page.PAGE_ARRAY_LRNGTH;
	private String type=Page.ARRAY;
	
	private String toString;
	/**
	 * 
	 * @param items			current page content.
	 * @param totalItems	all of the query data amount.
	 * @param size			page size.
	 * @param page			current page.
	 */
	@SuppressWarnings("unchecked")
	public Page(List items, int totalItems, int size, int page) {
		this.setSize(size);
		this.setItems(items);
		this.setTotalItems(totalItems);
		this.setPage(page);
		this.setToString();
	}
	
	public void setTotalItems(int totalItems) {   
		this.totalItems = totalItems;   
        if (this.totalItems > 0) {   
            if (this.totalItems % this.size == 0)this.total=(this.totalItems/this.size);
            else this.total=(this.totalItems/this.size)+1;
        } else this.total = 0;   
    }
	
	/**
	 * return page string.
	 */
	public String toString(){
		//templet:【共13条记录】【当前为1到5条】【首页】【上页】【下页】【尾页】【第1页/共3页】
		//templet:【共13条记录】		totalItemsString
		//templet:【当前为1到5条】		crruentItemsString		
		//templet:【首页】			firstPageString
		//templet:【上页】			beforePageString
		//templet:【1】...7 8【9】11 12...【33】	pagesArrayString
		//templet:【下页】			afterPageString
		//templet:【尾页】			lastPageString
		//templet:【当前为第1页】		crruentPageString
		//templet:【共3页】			totalPagesString
		if(Page.CUSTOM.equals(this.type)){
			return this.CustomTypeString();
		}else{
			return this.PagesArrayString();
		}
	}
	
	private String CustomTypeString(){
		return this.getTotalItemsString()+
		this.getCrruentItemsString()+
		this.getFirstPageString()+
		this.getBeforePageString()+
		this.getAfterPageString()+
		this.getLastPageString()+
		this.getCrruentPageString()+
		this.getTotalPagesString();
	}
	
	public String getTotalItemsString(){
		return "【共"+this.totalItems+"条记录】";
	}
	
	public String getCrruentItemsString(){
		int f=(this.page-1)*this.size+1;
		int l=this.page*this.size;
		if(this.total==0)return "";
		else if(l>this.totalItems)return f==this.totalItems?"【当前为第"+f+"条】":"【当前为"+f+"到"+this.totalItems+"条】";
		else return "【当前为"+f+"到"+l+"条】";
	}
	
	public String getTotalPagesString(){
		return this.total==0?"":"【共"+this.total+"页】";
	}
	
	public String getCrruentPageString(){
		return this.total==0?"":"【当前为第"+this.page+"页】";
	}
	
	public String getFirstPageString(){
		if(this.total==0)return "";
		else return this.page==1?"【首页】":this.PagesArrayStringUtil(1, "【首页】", true);
	}
	
	public String getBeforePageString(){
		if(this.total==0)return "";
		else return this.page==1?"【上页】":this.PagesArrayStringUtil((this.page-1), "【上页】", true);
	}
	
	public String getAfterPageString(){
		if(this.total==0)return "";
		else return this.page==this.total?"【下页】":this.PagesArrayStringUtil((this.page+1), "【下页】", true);
	}
	
	public String getLastPageString(){
		if(this.total==0)return "";
		else return this.page==this.total?"【尾页】":this.PagesArrayStringUtil(this.total, "【尾页】", true);
	}
	
	private String PagesArrayString(){
		String text="";
		//1...b~cp~n...t ,b<=cp<=n,1<=cp<=t
		int t=this.total;
		int l=this.pageArrayLength%2==1?this.pageArrayLength:this.pageArrayLength+1;
		int cp=this.page;
		int b=cp-(l-1)/2;
		int n=cp+(l-1)/2;
		if(t==0)return "";
		else if(t==1)return this.PagesArrayStringUtil(1, true);
		else{
			if(b<=2){
				if(n<t-1){//b<=2&&n<t-1, 1~n...t
					for(int i=1;i<=n;i=i+1){
						if(i==1||i==this.page||i==t)text+=this.PagesArrayStringUtil(i, true);
						else text+=this.PagesArrayStringUtil(i, false);
					}
					text+="...";
					text+=this.PagesArrayStringUtil(t, true);
					return text;
				}else{//b<=2&&n>=t-1, 1~t
					for(int i=1;i<=t;i=i+1){
						if(i==1||i==this.page||i==t)text+=this.PagesArrayStringUtil(i, true);
						else text+=this.PagesArrayStringUtil(i, false);
					}
					return text;
				}
			}else{
				if(n<t-1){//b>2&&n<t-1, 1...b~n...t
					text+=this.PagesArrayStringUtil(1, true);
					text+="...";
					for(int i=b;i<=n;i=i+1){
						if(i==1||i==this.page||i==t)text+=this.PagesArrayStringUtil(i, true);
						else text+=this.PagesArrayStringUtil(i, false);
					}
					text+="...";
					text+=this.PagesArrayStringUtil(t, true);
					return text;
				}else{//b>2&&n>=t-1, 1...b~t
					text+=this.PagesArrayStringUtil(1, true);
					text+="...";
					for(int i=b;i<=t;i=i+1){
						if(i==1||i==this.page||i==t)text+=this.PagesArrayStringUtil(i, true);
						else text+=this.PagesArrayStringUtil(i, false);
					}
					return text;
				}
			}
		}
	}
	
	/**
	 * 
	 * @param page		page index number.
	 * @param current	whether is current page.
	 * @return 		
	 */
	private String PagesArrayStringUtil(int page,boolean current){
		return this.PagesArrayStringUtil(page, page+"", current);
	}
	
	/**
	 * 
	 * @param page 		page index number.
	 * @param templet	return string templet
	 * @param current	whether is current page.
	 * @return
	 */
	private String PagesArrayStringUtil(int page,String templet,boolean current){
		if(current) return "<b><a href='page.action?page="+page+"'>"+templet+"</a></b>";
		else return "<a href='page.action?page="+page+"'>"+templet+"</a>";
	}
	
	public int getTotal(){
		return this.total;
	}

	@SuppressWarnings("unused")
	public void setAction(String action) {
		this.action=action;
	}

	public void setForm(String form) {
		this.form=form;
	}

	public int getSize() {
		return size;
	}

	private void setSize(int size) {
		this.size = size<1?Page.SIZE:size;
	}

	public List<?> getItems() {
		return items;
	}

	public int getTotalItems() {
		return totalItems;
	}

	public void setPage(int page) {		
		if(page<1)this.page=1;
		else this.page = page>this.total?this.total:page;
	}

	@SuppressWarnings("unchecked")
	public void setItems(List items) {
		this.items = items;
	}

	public void setPageArrayLength(int pageArrayLength) {
		this.pageArrayLength = pageArrayLength;
	}

	public void setType(String type) {
		this.type = type;
	}

	public String getToString() {
		return toString;
	}

	private void setToString() {
		this.toString = this.toString();
	}

}

0 请登录后投票
   发表时间:2008-11-18  
bubble 写道
支持一下楼主,给你贴一个我最近写的一个分页:
package org.base;

import java.util.List;
/**
 * 
 * @author Bubble zheshexian@gmail.com
 *
 */
public class Page {

......



楼上的也是在拼html。拜倒了。就一个你人支持楼主。。。看看别人回帖先。。
0 请登录后投票
   发表时间:2008-11-18  
命名不规范,HTML与类和在一起。
还有居然不用StringBuilder或StringBuffer。
注释没有。
垃圾代码没有删。


很烂。。。
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics