分頁(yè)接口 :
1 package com.forum.util;
2
3
4 public interface Pager
5 {
6 /** 默認第一頁(yè)號 **/
7 int FIRST_PAGE_NO = 1;
8
9 /** 默認頁(yè)大小 **/
10 int DEFAULT_PAGE_SIZE = 10;
11
12 /** 頁(yè)大小 **/
13 String PAGE_SIZE_KEY = "PageSize";
14
15 /** 頁(yè)號 **/
16 String PAGE_NO_KEY = "PageNO";
17
18 /** 獲取記錄數 **/
19 int getRowsCount();
20
21 /** 設置記錄總數 **/
22 void setRowsCount( int rowsCount );
23
24 /** 獲取總頁(yè)數 **/
25 int getPageCount();
26
27 /** 獲取頁(yè)大小 **/
28 int getPageSize();
29
30 /** 設置頁(yè)大小 **/
31 void setPageSize( int pageSize );
32
33 /** 獲取上一頁(yè)號 **/
34 int getPrevPageNO();
35
36 /** 獲取上一頁(yè)鏈接 **/
37 String getPrevPageURL();
38
39 /** 獲取下一頁(yè)號 **/
40 int getNextPageNO();
41
42 /** 獲取下一頁(yè)鏈接 **/
43 String getNextPageURL();
44
45 /** 獲取第一頁(yè)號 **/
46 int getFirstPageNO();
47
48 /** 獲取第一頁(yè)鏈接 **/
49 String getFirstPageURL();
50
51 /** 獲取最后一頁(yè)號 **/
52 int getLastPageNO();
53
54 /** 獲取最后一頁(yè)鏈接 **/
55 String getLastPageURL();
56
57 /** 獲取當前頁(yè)號 **/
58 int getCurPageNO();
59
60 /** 獲取當前頁(yè)號鏈接 **/
61 String getCurPageURL();
62
63 /** 獲取指定頁(yè)號的連接 **/
64 String getPageURL( int pageNO );
65
66 /** 是否有下一頁(yè) **/
67 boolean hasNextPage();
68
69 /** 是否有上一頁(yè) **/
70 boolean hasPrevPage();
71
72 /** 設置請求URL **/
73 void setRequestURL( String requestURL );
74
75 /** 獲取請求URL **/
76 String getRequestURL();
77
78 /** 增加頁(yè)面參數 **/
79 void addParameter(String parameterName , String parameterValue);
80
81 /** 獲取分頁(yè)控制條 **/
82 String getControlBar( Object parameter );
83 }
84
接口實(shí)現 : 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="#">當前頁(yè)數:<span style="color:#FF0000"><%=pager.getCurPageNO()%></span></a>
17 <a href="<%=pager.getFirstPageURL()%>">第一頁(yè)</a>
18 <a href="<%=pager.getPrevPageURL()%>">上一頁(yè)</a>
19 <a href="<%=pager.getNextPageURL()%>">下一頁(yè)</a>
20 <a href="<%=pager.getLastPageURL()%>">最后一頁(yè)</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%> 頁(yè)</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 每頁(yè)顯示記錄數
47 * @param curPageNO 當前頁(yè)
48 * @param requestURL頁(yè)面訪(fǎng)問(wèn)URL
49 * @param Example : Pager pager = new SimplePager(threadsCount , pageSize ,curPageNo , "listthreads");
50 * @param 保存參數[通常是保存頁(yè)面查詢(xún)條件] : pager.addParameter("username","root");
51 * @param 保存參數[通常是保存頁(yè)面查詢(xún)條件] : 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 否則只有一頁(yè)
64 * @param 必須設置pageSize 否則默認每頁(yè)只顯示10條
65 * @param 必須設置curPageNO 否則你永遠都在第一頁(yè)
66 * @param 必須設置requestURL否則將使用默認請求地址,生成鏈接地址結果(理論上不會(huì )錯) : <a href=‘?PageNO=2&PageSize=10‘ title=‘第2頁(yè)‘>[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 * 生成默認分頁(yè)工具條
188 * 樣式 : <<第一頁(yè) <前十頁(yè) [1] [2] [3] [4] [5] [6] [7] 后十頁(yè)> 最后一頁(yè)>>
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=‘第一頁(yè)‘><span><<第一頁(yè)</span></a> ");
205 bar.append("<a href=‘" + getPageURL( curPageNO - 10 ) + "‘ title=‘前10頁(yè)‘><span><前十頁(yè)</span></a> ");
206 for( int i = startPageNo ; i <= endPageNo ; i++)
207 {
208 bar.append(" <a href=‘" + getPageURL( i ) + "‘ title=‘第" + i + "頁(yè)‘" + ( i == curPageNO ? "style=‘color:red;‘" : "") + ">[" + i + "]</a>");
209 }
210 bar.append(" <a href=‘" + getPageURL( curPageNO + 10 ) + "‘ title=‘后10頁(yè)‘><span>后十頁(yè)></span></a>");
211 bar.append(" <a href=‘" + getLastPageURL() + "‘ title=‘最后一頁(yè)‘><span>最后一頁(yè)>></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或者設計的上的問(wèn)題請各位高手指教。
菜鳥(niǎo)俺先謝過(guò)了~~ 嘿嘿
Pager
源代碼下載Pager
源代碼下載Pager
源代碼下載