`
xuming9
  • 浏览: 26340 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
最近访客 更多访客>>
社区版块
存档分类
最新评论

show下我的分页类

阅读更多
package com.xm.utils;

import java.util.Enumeration;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.kangsheng.cus.common.dbconn.DaoFactory;

// Referenced classes of package com.sihitech.tools:
//            DaoFactory

public class PageRoll {
	private String currentUrl;

	// private PageContext page;

	private DaoFactory pv;

	private HttpServletRequest request;

	private HttpServletResponse response;

	private String strParams;

	private String strlink;

	public PageRoll(HttpServletRequest request, HttpServletResponse response,
			DaoFactory pv) {
		currentUrl = "";
		strParams = "";
		this.request = request;
		this.response = response;
		this.pv = pv;
		currentUrl = request.getRequestURL().toString();

		strParams = GetParamsFromCurrentUrl();
	}

	private String GetParamsFromCurrentUrl() {
		String str1 = "";
		String paraValue = "";
		for (Enumeration enu = request.getParameterNames(); enu
				.hasMoreElements();) {
			String paraName = (String) enu.nextElement();
			paraValue = request.getParameter(paraName);
			if (!paraName.equals("page"))
				str1 = str1 + "&" + paraName + "=" + paraValue;
		}

		return str1;
	}

	public void Show(boolean allRecord, boolean pageInfo, boolean pageNav,
			boolean jumpPage) {
		// PrintWriter out = response.getWriter();
		// out.print("<table border=0> <tr><td>");
		String link = "";
		if (allRecord)
			link = link + ShowTotalRecord();
		if (pageInfo)
			link = link + ShowPageInfo();
		if (pageNav)
			link = link + ShowPageNav();
		if (jumpPage)
			link = link + ShowJumpPage();
		this.strlink = link;
		// out.print("</td></tr></table>");
	}

	private String ShowJumpPage() {
		// PrintWriter out = response.getWriter();
		String link = "";
		link = link
				+ "转到第<input type='text' name='page' size='1'><span>页</span><input type=button value='GO' onclick='goToPage()'>";
		link = link + "<script language='javascript'>";
		link = link + "function goToPage(){";
		link = link + "value=document.all.page.value;";
		link = link
				+ "if(value.indexOf(\".\")==-1 && value.indexOf(\"-\")==-1 && value!==\"\" && !isNaN(value) && value>0 && value<"
				+ (pv.GetTotalPage() + 1) + "){";
		link = link + "location.assign('" + currentUrl + "?page='+value+'"
				+ strParams + "')";
		link = link + "}";
		link = link + "}";
		link = link + "</script>";
		return link;
	}

	private String ShowPageInfo() {
		// PrintWriter out = response.getWriter();
		String link = "第" + pv.GetCurrentPage() + "/" + pv.GetTotalPage()
				+ "页&nbsp";
		return link;
	}

	private String ShowPageNav() {
		// PrintWriter out = response.getWriter();
		String link = "";
		if (pv.GetTotalPage() > 1)
			link = "<a href='" + currentUrl + "?page=1" + strParams
					+ "'><span>首页</span></a>&nbsp;";
		else
			link = "<span>首页&nbsp;</span>";
		//
		if (pv.GetHasPrev())
			link = link + "<a href='" + currentUrl + "?page="
					+ pv.GetPrevPageNumber() + strParams + "'><span>上页</span></a>&nbsp;";
		else
			link = link + "<span>上页&nbsp;</span>";
		//
		if (pv.GetHasNext())
			link = link + "<a href='" + currentUrl + "?page="
					+ pv.GetNextPageNumber() + strParams + "'><span>下页</span></a>&nbsp;";
		else
			link = link + "<span>下页&nbsp;</span>";
		//
		if (pv.GetTotalPage() > 1) {
			link = link + "<a href='" + currentUrl + "?page="
					+ pv.GetTotalPage() + strParams + "'><span>尾页</span></a>&nbsp;";
			return link;
		} else {
			link = link + "<span>尾页&nbsp;</span>";
			return link;
		}
	}

	private String ShowTotalRecord() {
		// PrintWriter out = response.getWriter();
		String link = "<span>共" + pv.GetTotalRecord() + "条记录&nbsp;</span>";
		return link;
	}

	public String getStrlink() {
		return strlink;
	}

	public void setStrlink(String strlink) {
		this.strlink = strlink;
	}

}


使用时,在action中建立该类的对象pr,并执行public void Show(boolean allRecord, boolean pageInfo, boolean pageNav,boolean jumpPage),将该对象放入ModelAndView,在页面使用${pr.strlink }就可以实现分页,如图


本人从事JAVA才1年,希望达到抛砖引玉的效果,大家把自己的工具拿出来show show,共同研究下,学习下
也建议版主弄一个工具包专题
  • 大小: 4 KB
分享到:
评论
48 楼 weirihai 2008-11-19  
呵呵
有时候不要直接说别人写的差啊!!
你可以指出别人的不足啊
把你好的贴出来啊!!
别人贴出来也是希望你指点的啊!!!
47 楼 xuming9 2008-11-19  
感谢楼上提出的意见,争取下次show段让你们满意的代码
46 楼 Clayz 2008-11-18  
赞扬lz的勇气和精神,但不得不说的是,这段代码真的让人看不下去...
45 楼 frogfool 2008-11-18  
my js component screenshot

44 楼 frogfool 2008-11-18  
@xuming9
1 赞赏搂主晒代码的勇气!
2 分页类应该只是分页参数类,尽量做到简单,不应该耦合HttpServletRequest/HttpServletResponse/DaoFactory


@qianlei007
建议分页参数类不要加入过多其他计算方法,这些方法可由js处理

@simon511
排序可以再加入一个OrderMode之类的类处理,这样底层开放的接口可以灵活些
List find(Pagination pagination,OrderMode orderMode);
List find(Pagination pagination);

欢迎排砖
43 楼 seasar 2008-11-18  
很糟糕的编码风格
42 楼 frogfool 2008-11-18  

my pagination source code

package commons.param;

import java.io.Serializable;

import java.util.List;

import commons.util.Assertion;

public class Pagination implements Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = -8771057905059891041L;

	public static final int DEFAULT_SIZE = 20;

	/** items */
	private List items;

	/** index */
	private int index = 1;

	/** size */
	private int size = DEFAULT_SIZE;

	/** count */
	private int count = -1;

	/** count or not */
	private boolean counted = false;

	public Pagination() {

	}

	public Pagination(int size) {
		Assertion.isPositive(size,
				"The [size] argument should be greater than zero.");
		this.size = size;
	}

	public Pagination(List items, int count, int index, int size) {
		this.setItems(items);
		this.setCount(count);
		this.setIndex(index);
		this.setSize(size);
	}
	/**
	 * item count in current page
	 * 
	 * @return
	 */
	public int getLength() {
		if (null != items) {
			return items.size();
		}
		return 0;
	}

	//setter/getter of private members
	//...

}



//Assertion
package commons.util;

import org.springframework.util.Assert;

public class Assertion extends Assert {
	//...other Asserts
	public static void isPositive(long value, String message) {
		if (value <= 0) {
			throw new IllegalArgumentException(message);
		}
	}
	//...other Asserts
}


Web browser(IE,FireFox) get response data in json format(generate by freemarker) from server(WebWork)
//pagination.json.ftl
//usage: <#include "/system/support/pagination.json.ftl" />
{
	pagination: {
	<#if pagination ? exists>
		index: ${(pagination.index)?default(1)},
		length: ${(pagination.getLength())?default(0)},
		size: ${(pagination.size)?default(20)},
		count: ${(pagination.count)?default(0)},
		counted: ${(pagination.counted)?string("true","false")}
	<#else>
		index: 1,
		length: 0,
		size: 10,
		count: 0,
		counted: false
	</#if>		
	}
}



render view with js component
function XPagination() {
   //...
}
var xpagination = new XPagination(o.pagination);




41 楼 wdlfellow 2008-11-18  
上一站,火星 写道
有啥好show的?写的这么烂


给人家留点面子唉,呵呵,看得出来工作不久,态度很好,我觉得这已经足够了,设计上的不足要加强学习了
40 楼 xuming9 2008-11-18  
bubble 写道
支持一下楼主,给你贴一个我最近写的一个分页:
package org.base;

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

....



呵呵,兄弟,
俺献丑了,
39 楼 jltest 2008-11-18  
命名不规范,HTML与类和在一起。
还有居然不用StringBuilder或StringBuffer。
注释没有。
垃圾代码没有删。


很烂。。。
38 楼 EXvision 2008-11-18  
bubble 写道
支持一下楼主,给你贴一个我最近写的一个分页:
package org.base;

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

......



楼上的也是在拼html。拜倒了。就一个你人支持楼主。。。看看别人回帖先。。
37 楼 bubble 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();
	}

}

36 楼 qianlei007 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;
	}
35 楼 04023129 2008-11-18  
把HTML放在action里面写。。。真的很难看啊
34 楼 softcat 2008-11-18  
写得真烂!
33 楼 simon511 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  按什么排序
32 楼 xuming9 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.



31 楼 qianlei007 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;
	}


}




不知道有人看没!
30 楼 troyconder 2008-11-18  
勿怪 不过我的确感觉你这么设计非常不好 极高的耦合 极好的维护难度 可读性也比较差 而且直接把请求传入javabean也是非常不好的做法 可能对于你的应用比较好用吧 毋怪
29 楼 xuming9 2008-11-18  
再次感谢楼上的兄弟们提出宝贵意见,

最后大家也show些自己的类把,哈哈

相关推荐

    PHP超强分页类

    2. **样式调整**:可以通过调整类中的属性值来改变分页组件的外观,例如更改文字、图标等。 #### 六、总结 PHP超强分页类不仅提供了基础的分页功能,还支持自定义显示模式、AJAX分页等功能,使得开发者能够根据项目...

    oracle 分页类文件

    在实际使用中,开发者可以通过`ShowPage`类设置分页参数,然后调用其内部的查询方法,由`ShowSQL.java`生成对应的SQL语句,最后执行查询并返回结果。这个过程中,`StringUtil.java`起到辅助作用,确保SQL的正确性和...

    最常用php类集合 分页类 mysql类等等

    5. **show_page.rar**:这个名字暗示可能是一个分页类,用于处理大型数据集的分页显示,常用于网页上显示大量的记录时,提高用户体验。 6. **adodb300.tgz**:ADODB(Active Record Object-Database Bridge)是一个...

    简单_方便_功能全的php分页类

    根据给定的信息,本文将对一个“简单、方便、功能全”的PHP分页类进行详细的解析,包括其构造方法、属性、以及如何实现分页显示的功能。通过本篇内容,您将了解到该类的设计思想、核心函数的工作原理,以及如何在...

    两款万能的php分页类

    此外,类中的`show`方法(在文档片段中未显示)应该负责将处理好的分页数据转换为HTML输出。 ### 结论 通过以上知识点的讨论,我们可以看出,万能的PHP分页类对于快速开发和实现分页功能是非常有帮助的。开发者只...

    asp超强分页类文档

    此外,类内部可能有错误处理机制,如`ErrInfo`和`ShowError`方法,当参数错误或出现异常时,会显示相应的错误信息。 总的来说,这个ASP超强分页类通过优化代码和算法,提高了处理大量数据时的分页效率,同时提供了...

    一个PHP分页类的代码

    分页类支持四种不同的分页模式,可以通过`show`方法的参数来切换。这四种模式可能包括不同的显示样式或链接结构,例如,模式1可能是基础的数字链接,模式2可能包含上一页/下一页按钮等。 5. **AJAX支持** 当`is_...

    ThinkPHP分页类

    当网站的留言内容越来越多的时候,分页功能的应用就应运而生了,来重点讲解下ThinkPHP框架自带的分页类的调用。 知识点: 1、count函数的试用 2、Page类实例化操作及相关参数了解 3、limit函数了用 4、show函数...

    thinkphp分页功能类

    `Page`类提供了`show()`方法,用于生成分页的HTML代码。默认情况下,它会根据设定的样式生成完整的分页链接。例如: ```php echo $Page-&gt;show(); // 输出分页HTML ``` 4. **获取分页数据**: 调用`Page`类的`...

    ThinkPhp3.1.3仿百度分页类

    ThinkPhp仿百度分页类,在ThinkPhp3.1.3下测试通过 Author: 泡泡堂 &lt;46445280@qq.com&gt; 参照 ThinkPhp3.1.3 及 ThinkPhp3.2.1护展包下的 Page.class.php 说明:在ThinkPhp3.1.3下测试通过,其它版本未做测试 ...

    ASP无存储过程高效分页类

    `Show.asp`文件可能是展示分页数据的主页面。在这个文件中,我们需要实例化分页类,传入必要的参数如每页显示的记录数、当前页数、数据库连接信息等。然后调用`GetPageData()`方法获取当前页的数据,并在HTML中进行...

    php 高级 分页类 源码

    * description:超强分页类,四种分页模式,默认采用类似baidu,google的分页风格。 * 2.0增加功能:支持自定义风格,自定义样式,同时支持PHP4和PHP5, * to see detail,please visit ...

    使用非常方便的 php 分页类

    php 分页类,很方便使用 ////演示 ////require_once('../libs/classes/page.class.php'); //$page=new minupage(array('total'=&gt;1000,'perpage'=&gt;20)); //echo 'mode:1 '.$page-&gt;show(); //echo '&lt;hr&gt;mode:2 '...

    简单实用的PHP分页类

    自己写的简单实用的PHP分页类,支持URL重写,支持多种选项设置 包括: show_list-是否显示数字列表页码 list_num-当显示数字列表页码时该变量表示数字的数量 prefix-当使用URL重写时使用该变量值连接表示的页码的GET...

    ThinkPHP分页类.zip

    当网站的留言内容越来越多的时候,分页功能的应用就应运而生了,来重点讲解下ThinkPHP框架自带的分页类的调用。 知识点: 1、count函数的试用 2、Page类实例化操作及相关参数了解 3、limit函数了用 4、...

    jQuery分页插件设置分页内容显示数量的分页代码

    在网页开发中,分页是一种常见的用户界面设计,用于处理大量数据时的浏览体验优化。jQuery,作为一个轻量级的JavaScript库,提供了丰富的插件来实现分页功能。本篇文章将详细讲解如何使用jQuery分页插件来设置分页...

    struts2.0实现的数据分页实现及实现分页步骤

    通过以上步骤,你可以实现Struts2.0框架下的数据分页功能。注意,为了优化性能和用户体验,还应考虑缓存策略、错误处理和异常处理等细节。同时,随着技术的发展,现代的Web应用可能更倾向于使用ORM框架(如Hibernate...

    PHP超好用的分页类,支持两个模式

    一种是最简单的普通分页模式[首页] [上页] [下页] [尾页]模式,另一种是经典分页模式,即:[1][2][3][4][5][6][7][8][9][10][下一页][尾页]。 使用方法 require_once 'pager.class.php'; $pager = new pager($...

Global site tag (gtag.js) - Google Analytics