今天下定决心弄明白je的分页.捣鼓了快一个小时才弄明白规律.
用最笨的方法写了个类好长好长..大家看着不要眼晕..
我就发其中的一段代码了.刚才发现发太多.浏览器直接崩了.. 看来代码写太烂.浏览器也发威
我就不发原版了.太长了有600行了.
大家看代码就可以了.在附件page.java.rar中
我这里就不写了
就是这么个东西.我看着也眼晕.所以就想好好改下(美其名曰:重构)
改成下面的
(重构版)
package com.smallq.util;
import java.util.ArrayList;
import java.util.List;
public class RefactorPage {
public static void main(String[] args) {
List<String> l = RefactorPage.getPageHref(7, 4, "pageAction.do?page");
for (String s : l) {
System.out.println(s);
}
}
/**
* 分页链接显示
*
* @param totalPage
* @param page
* @param url
* @return
*/
public static List<String> getPageHref(int totalPage, int page, String url) {
List<String> list = new ArrayList<String>();
list.add("<div class='pagination'>");
page = checkOutPage(totalPage, page, url, list);
if (totalPage < 7) {
outAll(totalPage, page, url, list);
} else if (totalPage == 7 || totalPage == 8) {
totalPageSevenEight(totalPage, page, url, list);
} else {
greatThanEight(totalPage, page, url, list);
}
checkEndPage(totalPage, page, url, list);
list.add("</div>");
return list;
}
private static void checkEndPage(int totalPage, int page, String url,
List<String> list) {
if (page != totalPage) {
list.add(" <a href=" + url + "=" + (page + 1)
+ " class='next_page' rel='next'>下一页 »</a>");
} else {
list.add(" <span class='disabled next_page'>下一页 »</span>");
}
}
private static int checkOutPage(int totalPage, int page, String url,
List<String> list) {
if (page < 1)
page = 1;
if (page > totalPage)
page = totalPage;
if (page != 1) {
list.add("<a href=" + url + "=" + (page - 1)
+ " class='prev_page' rel='prev start'>« 上一页</a> ");
} else {
list.add("<span class='disabled prev_page'>« 上一页</span> ");
}
return page;
}
private static void greatThanEight(int totalPage, int page, String url,
List<String> list) {
if (page < 3) {
previousTwoPage(page, url, list);
addFootPage(totalPage, url, list);
} else if (page > totalPage - 2) {
addHeadPage(url, list);
lastTwoPage(totalPage, page, url, list);
} else if (page == 3) {
thirdPage(page, url, list);
addFootPage(totalPage, url, list);
} else if (page == totalPage - 2) {
countDownThirdPage(totalPage, page, url, list);
} else if (page == 4) {
forthPage(page, url, list);
addFootPage(totalPage, url, list);
} else if (page == totalPage - 3) {
addHeadPage(url, list);
countDownForthPage(totalPage, page, url, list);
} else if (page == 5) {
fifthPage(page, url, list);
addFootPage(totalPage, url, list);
} else if (page == totalPage - 4) {
addHeadPage(url, list);
countDownFifthPage(totalPage, page, url, list);
} else {
addHeadPage(url, list);
// 中间
list.add("<a href=" + url + "=" + (page - 1) + ">" + (page - 1)
+ "</a>");
list.add("<span class='current'>" + page + "</span>");
list.add("<a href=" + url + "=" + (page + 1) + ">" + (page + 1)
+ "</a>");
// 后段
addFootPage(totalPage, url, list);
}
}
private static void totalPageSevenEight(int totalPage, int page,
String url, List<String> list) {
if (page < 3) {
previousTwoPage(page, url, list);
addFootPage(totalPage, url, list);
} else if (page > totalPage - 2) {
addHeadPage(url, list);
lastTwoPage(totalPage, page, url, list);
} else if (page == 3 && totalPage == 8) {
thirdPage(page, url, list);
addFootPage(totalPage, url, list);
} else if (page == totalPage - 2 && totalPage == 8) {
countDownThirdPage(totalPage, page, url, list);
} else {
outAll(totalPage, page, url, list);
}
}
private static void outAll(int totalPage, int page, String url,
List<String> list) {
for (int i = 0; i < totalPage; i++) {
if (i + 1 == page) {
list.add("<span class='current'>" + page + "</span>");
i = i + 1;
if (page == totalPage)
break;
}
list.add("<a href=" + url + "=" + (i + 1) + ">" + (i + 1) + "</a>");
}
}
private static void previousTwoPage(int page, String url, List<String> list) {
for (int i = 0; i < 3; i++) {
i = iteratorOutPut(page, url, list, i);
}
}
private static void lastTwoPage(int totalPage, int page, String url,
List<String> list) {
for (int i = totalPage - 3; i < totalPage; i++) {
if (i + 1 == page) {
list.add("<span class='current'>" + page + "</span>");
i = i + 1;
if (page == totalPage)
break;
}
list.add("<a href=" + url + "=" + (i + 1) + ">" + (i + 1) + "</a>");
}
}
private static void thirdPage(int page, String url, List<String> list) {
for (int i = 0; i < 4; i++) {
i = iteratorOutPut(page, url, list, i);
}
}
private static void countDownThirdPage(int totalPage, int page, String url,
List<String> list) {
addHeadPage(url, list);
for (int i = totalPage - 4; i < totalPage; i++) {
if (i + 1 == page) {
list.add("<span class='current'>" + page + "</span>");
i = i + 1;
if (page == totalPage)
break;
}
list.add("<a href=" + url + "=" + (i + 1) + ">" + (i + 1) + "</a>");
}
}
private static void forthPage(int page, String url, List<String> list) {
for (int i = 0; i < 5; i++) {
i = iteratorOutPut(page, url, list, i);
}
}
private static void countDownForthPage(int totalPage, int page, String url,
List<String> list) {
for (int i = totalPage - 5; i < totalPage; i++) {
if (i + 1 == page) {
list.add("<span class='current'>" + page + "</span>");
i = i + 1;
if (page == totalPage)
break;
}
list.add("<a href=" + url + "=" + (i + 1) + ">" + (i + 1) + "</a>");
}
}
private static void countDownFifthPage(int totalPage, int page, String url,
List<String> list) {
for (int i = totalPage - 6; i < totalPage; i++) {
if (i + 1 == page) {
list.add("<span class='current'>" + page + "</span>");
i = i + 1;
if (page == totalPage)
break;
}
list.add("<a href=" + url + "=" + (i + 1) + ">" + (i + 1) + "</a>");
}
}
private static void fifthPage(int page, String url, List<String> list) {
for (int i = 0; i < 6; i++) {
i = iteratorOutPut(page, url, list, i);
}
}
private static int iteratorOutPut(int page, String url, List<String> list,
int i) {
while (i + 1 == page) {
list.add("<span class='current'>" + page + "</span>");
i = i + 1;
}
list.add("<a href=" + url + "=" + (i + 1) + " rel='next'>" + (i + 1)
+ "</a>");
return i;
}
private static void addFootPage(int totalPage, String url, List<String> list) {
list.add(" <span class='gap'>…</span> ");
list.add("<a href=" + url + "=" + (totalPage - 1) + ">"
+ (totalPage - 1) + "</a>");
list.add("<a href=" + url + "=" + (totalPage) + ">" + (totalPage)
+ "</a>");
}
private static void addHeadPage(String url, List<String> list) {
list.add("<a href=" + url + "=" + (1) + ">" + (1) + "</a>");
list.add("<a href=" + url + "=" + (2) + ">" + (2) + "</a>");
list.add(" <span class='gap'>…</span> ");
}
}
上面是重构过的.代码行数减少一半有
我想问下.还能继续go不?
还有我的分页想法就貌似不对.
大家看看
下面是个例子.里面有两个类.一个是原始的.一个是重构过的..
貌似是过度设计了.能改善算法的.尽量改改.怎么重构?怎么就叫过度设计了.这个度怎么把握?
看着代码减少了.看着更晕了..