锁定老帖子 主题:show下我的分页类
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2008-11-18
勿怪 不过我的确感觉你这么设计非常不好 极高的耦合 极好的维护难度 可读性也比较差 而且直接把请求传入javabean也是非常不好的做法 可能对于你的应用比较好用吧 毋怪
|
|
返回顶楼 | |
发表时间: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; } } 不知道有人看没! |
|
返回顶楼 | |
发表时间: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. |
|
返回顶楼 | |
发表时间: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 按什么排序 |
|
返回顶楼 | |
发表时间:2008-11-18
写得真烂!
|
|
返回顶楼 | |
发表时间:2008-11-18
把HTML放在action里面写。。。真的很难看啊
|
|
返回顶楼 | |
发表时间: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; } |
|
返回顶楼 | |
发表时间: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(); } } |
|
返回顶楼 | |
发表时间:2008-11-18
bubble 写道 支持一下楼主,给你贴一个我最近写的一个分页:
package org.base; import java.util.List; /** * * @author Bubble zheshexian@gmail.com * */ public class Page { ...... 楼上的也是在拼html。拜倒了。就一个你人支持楼主。。。看看别人回帖先。。 |
|
返回顶楼 | |
发表时间:2008-11-18
命名不规范,HTML与类和在一起。
还有居然不用StringBuilder或StringBuffer。 注释没有。 垃圾代码没有删。 很烂。。。 |
|
返回顶楼 | |