分页接口 :
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()%> </a>
16 <a href="#">当前页数:<span style="color:#FF0000"><%=pager.getCurPageNO()%></span></a>
17 <a href="<%=pager.getFirstPageURL()%>">第一页</a>
18 <a href="<%=pager.getPrevPageURL()%>">上一页</a>
19 <a href="<%=pager.getNextPageURL()%>">下一页</a>
20 <a href="<%=pager.getLastPageURL()%>">最后一页</a>
21 跳转到 <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> ");
205 bar.append("<a href='" + getPageURL( curPageNO - 10 ) + "' title='前10页'><span><前十页</span></a> ");
206 for( int i = startPageNo ; i <= endPageNo ; i++)
207 {
208 bar.append(" <a href='" + getPageURL( i ) + "' title='第" + i + "页'" + ( i == curPageNO ? "style='color:red;'" : "") + ">[" + i + "]</a>");
209 }
210 bar.append(" <a href='" + getPageURL( curPageNO + 10 ) + "' title='后10页'><span>后十页></span></a>");
211 bar.append(" <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
源代码下载