JAVA & XML & JAVASCRIPT & AJAX & CSS

Web 2.0 技术储备............

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  77 随笔 :: 17 文章 :: 116 评论 :: 0 Trackbacks
分页接口 :

 1 package com.forum.util;
 2 
 3 
 4 public interface Pager
 5 {
 6     /** 默认第一页号 **/
 7     int       FIRST_PAGE_NO = 1;
 8     
 9     /** 默认页大小 **/
10     int   DEFAULT_PAGE_SIZE = 10;
11     
12     /** 页大小 **/
13     String PAGE_SIZE_KEY = "PageSize";
14     
15     /** 页号 **/
16     String PAGE_NO_KEY = "PageNO";
17     
18     /** 获取记录数 **/
19     int getRowsCount();
20     
21     /** 设置记录总数 **/
22     void setRowsCount( int rowsCount );
23     
24     /** 获取总页数 **/
25     int getPageCount();
26     
27     /** 获取页大小 **/
28     int getPageSize();
29     
30     /** 设置页大小 **/
31     void setPageSize( int pageSize );
32     
33     /** 获取上一页号 **/
34     int getPrevPageNO();
35     
36     /** 获取上一页链接 **/
37     String getPrevPageURL();
38     
39     /** 获取下一页号 **/
40     int getNextPageNO();
41     
42     /** 获取下一页链接 **/
43     String getNextPageURL();
44     
45     /** 获取第一页号 **/
46     int getFirstPageNO();
47     
48     /** 获取第一页链接 **/
49     String getFirstPageURL();
50     
51     /** 获取最后一页号 **/
52     int getLastPageNO();
53     
54     /** 获取最后一页链接 **/
55     String getLastPageURL();
56     
57     /** 获取当前页号 **/
58     int getCurPageNO();
59     
60     /** 获取当前页号链接 **/
61     String getCurPageURL();
62     
63     /** 获取指定页号的连接 **/
64     String getPageURL( int pageNO );
65     
66     /** 是否有下一页 **/
67     boolean hasNextPage();
68     
69     /** 是否有上一页 **/
70     boolean hasPrevPage();
71     
72     /** 设置请求URL **/
73     void setRequestURL( String requestURL );
74     
75     /** 获取请求URL **/
76     String getRequestURL();
77     
78     /** 增加页面参数 **/
79     void addParameter(String parameterName , String parameterValue);
80     
81     /** 获取分页控制条 **/
82     String getControlBar( Object parameter );
83 }
84 


接口实现 : SimplePager 
  1 /**
  2     作者 :Fantasy
  3     Email: fantasycs@163.com
  4     QQ   : 8635335
  5     Blog : http://www.blogjava.net/fantasy
  6 */
  7 package com.forum.util;
  8 
  9 import java.util.HashMap;
 10 import java.util.Iterator;
 11 import java.util.Map;
 12 
 13 /** 使用参考 JSP
 14     <% Pager pager = new SimplePager(memberCount , pageSize ,curPageNo , "listmembers"); %>
 15     <a>总记录数 : <%=pager.getRowsCount()%>&nbsp;</a>&nbsp;&nbsp;&nbsp;
 16     <a href="#">当前页数:<span style="color:#FF0000"><%=pager.getCurPageNO()%></span></a>&nbsp;&nbsp;&nbsp;
 17     <a href="<%=pager.getFirstPageURL()%>">第一页</a>&nbsp;&nbsp;&nbsp;
 18     <a href="<%=pager.getPrevPageURL()%>">上一页</a>&nbsp;&nbsp;&nbsp;
 19     <a href="<%=pager.getNextPageURL()%>">下一页</a>&nbsp;&nbsp;&nbsp;
 20     <a href="<%=pager.getLastPageURL()%>">最后一页</a>&nbsp;&nbsp;&nbsp;
 21     跳转到&nbsp;<select onChange="document.URL=this.value">
 22     <% for( int i = 1 ; i <= pager.getPageCount() ; i++ ) { %>
 23     <option value="<%=pager.getPageURL(i)%>" <%= pager.getCurPageNO() == i ? "selected" : "" %>>第 <%=i%> 页</option>
 24     <% } %>
 25     <br>
 26     <%=pager.getControlBar("center")%>
 27     </select>
 28  **/
 29 public class SimplePager implements Pager
 30 {
 31     private int rowsCount;
 32     
 33     private int pageCount;
 34     
 35     private int curPageNO;
 36     
 37     private int pageSize;
 38     
 39     private String requestURL;
 40     
 41     private Map paramter = new HashMap();
 42     
 43     /**
 44      * 构造函数 ★推荐使用★
 45      * @param rowsCount 记录总数
 46      * @param pageSize     每页显示记录数
 47      * @param curPageNO 当前页
 48      * @param requestURL页面访问URL
 49      * @param Example : Pager pager = new SimplePager(threadsCount , pageSize ,curPageNo , "listthreads");
 50      * @param 保存参数[通常是保存页面查询条件] : pager.addParameter("username","root");
 51      * @param 保存参数[通常是保存页面查询条件] : pager.addParameter("logindate","2006-11-11");
 52      */
 53     public SimplePager( int rowsCount , int pageSize  , int curPageNO , String requestURL )
 54     {
 55         this.rowsCount = rowsCount;
 56         this.pageSize  = pageSize > 0 ? pageSize : DEFAULT_PAGE_SIZE;
 57         this.curPageNO = curPageNO >= FIRST_PAGE_NO ?  curPageNO : FIRST_PAGE_NO;
 58         this.requestURL  = requestURL;
 59     }
 60     
 61     /**
 62      * ★不推荐使用★
 63      * @param 必须设置rowsCount 否则只有一页
 64      * @param 必须设置pageSize  否则默认每页只显示10条
 65      * @param 必须设置curPageNO 否则你永远都在第一页
 66      * @param 必须设置requestURL否则将使用默认请求地址,生成链接地址结果(理论上不会错) : <a href='?PageNO=2&PageSize=10' title='第2页'>[2]</a>
 67      */
 68     public SimplePager()
 69     {
 70         this.rowsCount = 0;
 71         this.pageSize  = DEFAULT_PAGE_SIZE;
 72         this.curPageNO = FIRST_PAGE_NO;
 73         this.requestURL  = "";
 74     }
 75     
 76     public int getCurPageNO()
 77     {
 78         return curPageNO;
 79     }
 80     
 81     public int getNextPageNO()
 82     {
 83         return curPageNO + 1 <= getPageCount() ? curPageNO + 1 : getPageCount();
 84     }
 85     
 86     public void setRowsCount( int rowsCount )
 87     {
 88         this.rowsCount = rowsCount;
 89     }
 90     
 91     public int getRowsCount()
 92     {
 93         return rowsCount;
 94     }
 95     
 96     public String getNextPageURL()
 97     {
 98         return getPageURL( getNextPageNO() );
 99     }
100     
101     public String getPrevPageURL()
102     {
103         return getPageURL( getPrevPageNO() );
104     }
105     
106     public int getPageCount()
107     {
108         return (rowsCount > 0 && rowsCount % pageSize == 0? (rowsCount / pageSize) : (rowsCount/pageSize + 1);
109     }
110     
111     public int getPageSize()
112     {
113         return pageSize;
114     }
115     
116     public String getCurPageURL()
117     {
118         return getPageURL( getCurPageNO() );
119     }
120     
121     public int getPrevPageNO()
122     {
123         return curPageNO - 1 >= FIRST_PAGE_NO ? curPageNO - 1 : FIRST_PAGE_NO ;
124     }
125     
126     public boolean hasNextPage()
127     {
128         return curPageNO + 1 <= getPageCount();
129     }
130     
131     public boolean hasPrevPage()
132     {
133         return curPageNO - 1 >= FIRST_PAGE_NO ;
134     }
135     
136     public void setRequestURL(String requestURL)
137     {
138         this.requestURL = requestURL;
139     }
140     
141     public String getRequestURL()
142     {
143         return requestURL;
144     }
145     
146     public void setPageSize(int pageSize)
147     {
148         this.pageSize = pageSize;
149     }
150     
151     public int getFirstPageNO()
152     {
153         return FIRST_PAGE_NO;
154     }
155     
156     public String getFirstPageURL()
157     {
158         return getPageURL( getFirstPageNO() );
159     }
160     
161     public int getLastPageNO()
162     {
163         return getPageCount();
164     }
165     
166     public String getLastPageURL()
167     {
168         return getPageURL( getLastPageNO() );
169     }
170     
171     public String getPageURL(int pageNO)
172     {
173         pageNO = pageNO >= FIRST_PAGE_NO  ? pageNO : FIRST_PAGE_NO;
174         pageNO = pageNO <= getPageCount() ? pageNO : getPageCount();
175         StringBuffer buffer = new StringBuffer(256);
176         buffer.append(requestURL).append("?").append(PAGE_NO_KEY).append("=").append( pageNO );
177         buffer.append("&").append(PAGE_SIZE_KEY).append("=").append(pageSize);
178         return paramter.size() > 0 ? buffer.append( getRequestParameter() ).toString() : buffer.toString();
179     }
180     
181     public void addParameter(String parameterName, String parameterValue)
182     {
183         paramter.put(parameterName , parameterValue);
184     }    
185     
186     /**
187      * 生成默认分页工具条
188      * 样式 : <<第一页  <前十页  [1] [2] [3] [4] [5] [6] [7]  后十页>  最后一页>>
189      */
190     public String getControlBar( Object parameter )
191     {
192         int pagesView = 10;
193         int pageCount = getPageCount();
194         int startPageNo = FIRST_PAGE_NO ;
195         int endPageNo =  pageCount;
196         if( pagesView <  pageCount )
197         {
198             startPageNo = curPageNO - pagesView/2 >= FIRST_PAGE_NO ? curPageNO - pagesView/2 : FIRST_PAGE_NO;
199             startPageNo = startPageNo + pagesView <= pageCount ? startPageNo : pageCount - pagesView;
200             endPageNo   = startPageNo + pagesView;
201         }
202         StringBuffer bar = new StringBuffer(1024);
203         bar.append("<div id='PageControlBar' align='" + parameter.toString() + "'>");
204         bar.append("<a href='" + getFirstPageURL() + "' title='第一页'><span><<第一页</span></a>&nbsp;&nbsp;");
205         bar.append("<a href='" + getPageURL( curPageNO - 10 ) + "' title='前10页'><span><前十页</span></a>&nbsp;");
206         forint i = startPageNo ; i <= endPageNo ; i++)
207         {
208             bar.append("&nbsp;<a href='" + getPageURL( i ) + "' title='第" + i + "页'" + ( i == curPageNO ? "style='color:red;'" : ""+ ">[" + i + "]</a>");
209         }
210         bar.append("&nbsp;&nbsp;<a href='" + getPageURL( curPageNO + 10 ) + "' title='后10页'><span>后十页></span></a>");
211         bar.append("&nbsp;&nbsp;<a href='" + getLastPageURL() + "' title='最后一页'><span>最后一页>></span></a>");
212         bar.append("</div>");
213         return bar.toString();
214     }
215     
216     /**
217      * 获取自定义参数
218      */
219     private String getRequestParameter()
220     {
221         StringBuffer buffer = new StringBuffer(256);
222         for( Iterator iter = paramter.entrySet().iterator() ; iter.hasNext() ; )
223         {
224             Map.Entry entry = (Map.Entry)iter.next();
225             buffer.append("&").append( entry.getKey()).append("=").append(entry.getValue());
226         }
227         return buffer.toString();
228     }
229 }
230 


 若该API 有什么BUG或者设计的上的问题请各位高手指教。

菜鸟俺先谢过了~~ 嘿嘿

Pager 源代码下载

Pager 源代码下载

Pager 源代码下载
posted on 2006-10-16 23:20 Web 2.0 技术资源 阅读(4244) 评论(9)  编辑  收藏 所属分类: JAVA

评论

# re: [原创] 一个完善的轻量级分页API Pager ! 有源代码....... 2006-10-17 11:38 曲静波
我想你只考虑到JSP使用了,如果你打算把它做成通用的应该考虑到Servlet访问。还有,你的JSP上的内容,可以封装成标签。  回复  更多评论
  

# re: [原创] 一个完善的轻量级分页API Pager ! 有源代码....... 2006-10-17 20:14 fantasy
错! Servlet访问肯定不存在任何问题。

request.setAttribute("pager", pager);

能更好的解决问题。  回复  更多评论
  

# re: [原创] 一个完善的轻量级分页API Pager ! 有源代码....... 2006-10-17 22:59 Web 2.0 技术资源
该 Pager 能使用于任何WEB容器。

关键是怎么使用他。  回复  更多评论
  

# re: [原创] 一个完善的轻量级分页API Pager ! 有源代码....... 2006-10-18 14:41 123bingbing
增开7群,号码 30440732
8群 30756649
9群 30178567
10群 28694497

我们的qq群:15096318 学习程序的都可以来
  回复  更多评论
  

# re: [原创] 一个完善的轻量级分页API Pager ! 有源代码....... 2008-01-24 18:04 sly
那段放在JSP页面中的代码可以直接加进页面中使用吧,  回复  更多评论
  

# re: [原创] 一个完善的轻量级分页API Pager ! 有源代码....... 2008-01-24 18:05 sly
<% Pager pager = new SimplePager(memberCount , pageSize ,curPageNo , "listmembers"); %>

但是这个地方怎么老是报错呀  回复  更多评论
  

# re: [原创] 一个完善的轻量级分页API Pager ! 有源代码....... 2008-01-24 20:43 Web 2.0 技术资源
@sly
报什么错啊........ 不得哦!  回复  更多评论
  

# re: [原创] 一个完善的轻量级分页API Pager ! 有源代码....... 2008-01-25 11:55 sly
可以发一个简单的实例过来看一下吗?  回复  更多评论
  

# re: [原创] 一个完善的轻量级分页API Pager ! 有源代码....... 2013-05-16 16:03 龙歌
好像跟查询的数据没有关联 ?  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: