001 | package com.util; |
002 |
003 | import java.io.Serializable; |
004 | import java.util.ArrayList; |
005 | import java.util.Enumeration; |
006 | import java.util.List; |
007 | import java.util.StringTokenizer; |
008 |
009 | import javax.servlet.http.HttpServletRequest; |
010 |
011 | /** |
012 | * 描述显示结果集的页面 |
013 | */ |
014 | public class Page implements Serializable { |
015 |
016 | /** |
017 | * 空白页面 |
018 | */ |
019 | public static final Page EMPTY_PAGE = new Page( 0 , 0 ); |
020 |
021 | /** |
022 | * 结果集列表 |
023 | */ |
024 | List objects; |
025 | /** |
026 | * 开始记录号,从0开始 |
027 | */ |
028 | public int start; |
029 |
030 | /** |
031 | * 结束记录号 |
032 | */ |
033 | public int end; |
034 |
035 | /** |
036 | * 显示在页面开始记录号,从1开始 |
037 | */ |
038 | // public int viewStart; |
039 | /** |
040 | * 显示在页面结束记录号 |
041 | */ |
042 | // public int viewEnd; |
043 | /** |
044 | * 是否有上一页的开关 |
045 | */ |
046 | public boolean hasPrevious; // ok |
047 |
048 | /** |
049 | * 上一页的页码 |
050 | */ |
051 | public int previousPageNumber; // ok |
052 |
053 | /** |
054 | * 是否有下一页的开关 |
055 | */ |
056 | public boolean hasNext; // ok |
057 |
058 | /** |
059 | * 下一页的页码 |
060 | */ |
061 | public int nextPageNumber; // ok |
062 |
063 | /** |
064 | * 一共有多少行记录 |
065 | */ |
066 | public int total; // ok |
067 |
068 | /** |
069 | * 一共有多少页 |
070 | */ |
071 | public int totalPage; // ok |
072 |
073 | /** |
074 | * 当前是第几页 |
075 | */ |
076 | public int currentPageNumber; // ok |
077 |
078 | /** |
079 | * 每页有多少行 |
080 | */ |
081 | public int pageSize; // ok |
082 |
083 | /** |
084 | * 构造器,创建页面 |
085 | * |
086 | * @param: l 结果集 |
087 | * @param: s 开始记录号,从0开始 |
088 | */ |
089 | public Page( int total, int s) { |
090 | // objects = new ArrayList(l); |
091 | this .currentPageNumber = s / PageConfig.PAGE_SIZE + 1 ; |
092 | this .pageSize = PageConfig.PAGE_SIZE; |
093 | // System.out.println(pageSize+":size"); |
094 | // this.total = objects.size(); |
095 | this .total = total; |
096 | if (total == 0 ) { |
097 | this .currentPageNumber = 0 ; |
098 | } else { |
099 | autoCalculate(); |
100 | } |
101 | } |
102 |
103 | public Page( int total, int s, int pageSize) { |
104 | this .pageSize = pageSize; |
105 | this .currentPageNumber = s; |
106 | this .total = total; |
107 | if (total == 0 ) { |
108 | this .currentPageNumber = 0 ; |
109 | } else { |
110 | autoCalculate(); |
111 | } |
112 | } |
113 |
114 | public Page(ArrayList l, int s) { |
115 | objects = new ArrayList(l); |
116 | this .currentPageNumber = s / PageConfig.PAGE_SIZE + 1 ; |
117 | this .pageSize = PageConfig.PAGE_SIZE; |
118 | // System.out.println(pageSize+":size"); |
119 | this .total = objects.size(); |
120 | // this.total = total; |
121 | if (total == 0 ) { |
122 | this .currentPageNumber = 0 ; |
123 | } else { |
124 | autoCalculate(); |
125 | } |
126 | } |
127 |
128 | /** |
129 | * 自动计算,根据当前页、页大小、总行数计算出其它属性的值 |
130 | */ |
131 | public void autoCalculate() { |
132 | start = (currentPageNumber - 1 ) * pageSize; |
133 | end = start + pageSize - 1 ; |
134 | if (end >= total) { |
135 | end = total - 1 ; |
136 | } |
137 | totalPage = (total + pageSize - 1 ) / pageSize; |
138 | if (currentPageNumber == 1 ) { |
139 | hasPrevious = false ; |
140 | previousPageNumber = 1 ; |
141 | } else { |
142 | hasPrevious = true ; |
143 | previousPageNumber = currentPageNumber - 1 ; |
144 | } |
145 | if (currentPageNumber == totalPage) { |
146 | hasNext = false ; |
147 | nextPageNumber = totalPage; |
148 | } else { |
149 | hasNext = true ; |
150 | nextPageNumber = currentPageNumber + 1 ; |
151 | } |
152 | } |
153 |
154 | /** |
155 | * 获得结果集 |
156 | * |
157 | * @return: List 结果集 |
158 | */ |
159 | public List getList() { |
160 | return objects; |
161 | } |
162 |
163 | /** |
164 | * 获得显示在页面的开始记录号,从1开始 |
165 | * |
166 | * @return: int 显示在页面的开始记录号 |
167 | */ |
168 | public int getStart() { |
169 | return start; |
170 | } |
171 |
172 | /** |
173 | * 获得显示在页面的结束记录号 |
174 | * |
175 | * @return: int 显示在页面的结束记录号 |
176 | */ |
177 | public int getEnd() { |
178 | return end; |
179 | } |
180 |
181 | /** |
182 | * 是否有下一页 |
183 | * |
184 | * @return: boolean 是否有下一页的开关 |
185 | */ |
186 | public boolean hasNextPage() { |
187 | return hasNext; |
188 | } |
189 |
190 | /** |
191 | * 是否有上一页 |
192 | * |
193 | * @return: boolean 是否有上一页的开关 |
194 | */ |
195 | public boolean hasPreviousPage() { |
196 | return start > 0 ; |
197 | } |
198 |
199 | /** |
200 | * 获得上一页的页码 |
201 | * |
202 | * @return: int 上一页的页码 |
203 | */ |
204 | public int getPreviousPageNumber() { |
205 | return previousPageNumber; |
206 | } |
207 |
208 | /** |
209 | * 获得下一页的页码 |
210 | * |
211 | * @return: int 下一页的页码 |
212 | */ |
213 | public int getNextPageNumber() { |
214 | return nextPageNumber; |
215 | } |
216 |
217 | /** |
218 | * 获得结果集中记录总行数 |
219 | * |
220 | * @return: int 一共有多少行记录 |
221 | */ |
222 | public int getTotal() { |
223 | return total; |
224 | } |
225 |
226 | /** |
227 | * 获得总页数 |
228 | * |
229 | * @return: int 一共有多少页 |
230 | */ |
231 | public int getTotalPage() { |
232 | return totalPage; |
233 | } |
234 |
235 | /** |
236 | * 获得当前页码 |
237 | * |
238 | * @return: int 当前页码 |
239 | */ |
240 | public int getCurrentPageNumber() { |
241 | return currentPageNumber; |
242 | } |
243 |
244 | /** |
245 | * 获得每页多少行记录 |
246 | * |
247 | * @return: int 页大小 |
248 | */ |
249 | public int getPageSize() { |
250 | return pageSize; |
251 | } |
252 |
253 | /** |
254 | * 获得下一页在结果集中开始的记录号,从0开始 |
255 | * |
256 | * @return: int 下一页在结果集中开始的记录号 |
257 | */ |
258 | public int getStartOfNextPage() { |
259 | return start + this .total; |
260 | } |
261 |
262 | /** |
263 | * 获得上一页在结果集中开始的记录号,从0开始 |
264 | * |
265 | * @return: int 下一页在结果集中开始的记录号 |
266 | */ |
267 | public int getStartOfPreviousPage() { |
268 | return Math.max(start - this .total, 0 ); |
269 | } |
270 |
271 | /** |
272 | * 获得当前页包括的记录行数 |
273 | * |
274 | * @return: int 当前页包括的记录行数 |
275 | */ |
276 | public int getSize() { |
277 | return this .total; |
278 | } |
279 |
280 | /** |
281 | * 判断当前页面是否是空白页面,如果当前页面是空白页面, 返回true,否则,返回false |
282 | * |
283 | * @return: boolean 当前页面是否是空白页面 |
284 | */ |
285 | public boolean isEmpty() { |
286 | return this .total == 0 ; |
287 | } |
288 |
289 | public String toAjaxString() { |
290 | return "[CurrentPageNumber:" + this .getCurrentPageNumber() + "]" |
291 | + "[Total:" + this .getTotal() + "]" + "[PageSize:" |
292 | + this .getPageSize() + "]" + "[TotalPage:" |
293 | + this .getTotalPage() + "]" ; |
294 | } |
295 |
296 | public static String getParas(HttpServletRequest request, |
297 | String exceptionParamNames) { |
298 | String params = "" ; |
299 | Enumeration e = request.getParameterNames(); |
300 | outer: while (e.hasMoreElements()) { |
301 | String key = (String) e.nextElement(); |
302 | StringTokenizer st = new StringTokenizer(exceptionParamNames, "," ); |
303 | while (st.hasMoreTokens()) { |
304 | String exceptionName = st.nextToken(); |
305 | if (key.equals(exceptionName)) { |
306 | continue outer; |
307 | } |
308 | } |
309 | String value = request.getParameter(key); |
310 | params += "&" + key + "=" + value; |
311 | } |
312 | return params; |
313 | } |
314 | } |