从学会基本的分页后,我一直都想实现类仿JavaEye里的分页码功能,终于不负我多日地寻找资料和思考,完成了这个功能。以下我分享我的思路。
1、首先进行测试:
(1)、
总页数(totalPages) 1-6页 (如totalPages=6) | |
当前页号(currentPage) | 结果 |
1 | 1 2 3 4 5 6 |
总页数(totalPages) 7-10页 (如totalPages=9) | |
当前页号(currentPage) | 结果 |
1 | 1 2 3 …8 9 |
>=2 | 1 2 3 4 5 6 7 8 9 |
总页数(totalPages) >=11页 (如totalPages=50) | |
当前页号(currentPage) | 结果 |
1 | 1 2 …49 50 |
2 | 1 2 3…49 50 |
3 | 1 2 3 4…49 50 |
4 | 1 2 3 4 5…49 50 |
5 | 1 2 3 4 5 6…49 50 |
6 | 1 2 3 … 5 6 7…49 50 |
7 | 1 2 3 …6 7 8…49 50 |
44 | 1 2 3 …43 44 45…49 50 |
45 | 1 2 3 …44 45 46…49 50 |
46 | 1 2 3 …45 46 47 48 49 50 |
47 | 1 2 3 …46 47 48 49 50 |
48 | 1 2 3 …47 48 49 50 |
49-50 | 1 2 3 …48 49 50 |
(2)、实现:
package nn.bbs.common;
public class OldThepagema {
private int pageSize=10; //每页显示的行数
private int currentPage=44; //当前页号
private int totalRows=500; //总行数
public String showPagema() {
StringBuffer strBuf = new StringBuffer(400);
int totalPages=totalRows/pageSize;//总页数
int mod=totalRows%pageSize;
if(mod>0){
totalPages++;
}
if(currentPage<=0) currentPage =1;
if(currentPage>totalPages) currentPage=totalPages;
if(totalPages<=6){
for(int i=1;i<=totalPages;i++){
strBuf.append(i+" ");
}
}
else{
if(totalPages<=10&&totalPages>6){
if(currentPage==1){
strBuf.append("1 "+"2 "+"3 "+"..."+(totalPages-1)+" "+totalPages);
}
else{
for(int i=1;i<=totalPages;i++){
strBuf.append(i+" ");
}
}
}
else{
if(currentPage<6){
for(int i=1;i<=currentPage+1;i++){
strBuf.append(i+" ");
}
strBuf.append("..."+(totalPages-1)+" "+totalPages);
}
else{
if(currentPage<=(totalPages-5)){
strBuf.append("1 "+"2 "+"3 "+"..."+(currentPage-1)+" "+currentPage+" "+(currentPage+1)+"..."+(totalPages-1)+" "+totalPages);
}
else{
if(currentPage==totalPages||currentPage==(totalPages-1)){
strBuf.append("1 "+"2 "+"3 "+"..."+(totalPages-2)+" "+(totalPages-1)+" "+totalPages);
}
if(currentPage==(totalPages-2)){
strBuf.append("1 "+"2 "+"3 "+"..."+(totalPages-3)+" "+(totalPages-2)+" "+(totalPages-1)+" "+totalPages);
}
if(currentPage==(totalPages-3)){
strBuf.append("1 "+"2 "+"3 "+"..."+(totalPages-4)+" "+(totalPages-3)+" "+(totalPages-2)+" "+(totalPages-1)+" "+totalPages);
}
if(currentPage==(totalPages-4)){
strBuf.append("1 "+"2 "+"3 "+"..."+(totalPages-5)+" "+(totalPages-4)+" "+(totalPages-3)+" "+(totalPages-2)+" "+(totalPages-1)+" "+totalPages);
}
}
}
}
}
return strBuf.toString();
}
/**
* @param args
*/
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
OldThepagema pagema=new OldThepagema();
System.out.println(pagema.showPagema());
}
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getTotalRows() {
return totalRows;
}
public void setTotalRows(int totalRows) {
this.totalRows = totalRows;
}
}
2、具体操作
(1)、Page.java
package nn.bbs.common;
public class Page{
private int totalRows; //总行数
private int pageSize; //每页显示的行数
private int currentPage=1; //当前页号
private int totalPages; //总页数
private int startRow=0; //当前页在数据库中的起始行0,pageSize,pageSize*2,pageSize*3...
private String PREVIOUS_PAGE = "« 上一页";
private String NEXT_PAGE = "下一页 »";
public String getHref(int number) {
String s="towidget.action?page.currentPage="+number+"&page.pageSize="+pageSize;
return s;
}
public String goHref(int number) {
return "<a href=\"" + getHref(number) + "\">" + number + "</a>";
}
public Page() {
}
public Page(int totalRows,int _pageSize) {
this.totalRows =totalRows;
this.pageSize=_pageSize;
totalPages=totalRows/pageSize;
int mod=totalRows%pageSize;
if(mod>0){
totalPages++;
}
currentPage = 1;
startRow = 0;
}
public Page(int totalRows,int currentPage,int _pageSize) {
this.totalRows =totalRows;
this.pageSize=_pageSize;
totalPages=totalRows/pageSize;
int mod=totalRows%pageSize;
if(mod>0){
totalPages++;
}
if(currentPage<=0) currentPage =1;
if(currentPage>totalPages) currentPage=totalPages;
this.currentPage =currentPage;
startRow = (currentPage - 1)*pageSize;
}
//显示分页码
public String showPagema() {
StringBuffer strBuf = new StringBuffer(400);
strBuf.append("<div class=\"pagination\">");
//显示上一页
if (currentPage > 1) {
strBuf.append("<a href=\"" + getHref(currentPage - 1)
+ "\" class=\"prev_page\" rel=\"prev start\">"
+ PREVIOUS_PAGE + "</a>");
} else {
strBuf.append("<span class=\"disabled prev_page\">" + PREVIOUS_PAGE
+ "</span>");
}
if(totalPages<=6){
for(int i=1;i<=totalPages;i++){
if (i == currentPage) {
strBuf.append("<span class=\"current\">" + i + "</span>");
}
else {
strBuf.append(goHref(i));
}
//strBuf.append(i+" ");
}
}
else{
if(totalPages<=10&&totalPages>6){
if(currentPage==1){
strBuf.append("<span class=\"current\">" + currentPage + "</span>");
strBuf.append(goHref(1));
strBuf.append(goHref(2));
strBuf.append(goHref(3));
strBuf.append("<span class=\"gap\">…</span>");
strBuf.append(goHref(totalPages - 1));
strBuf.append(goHref(totalPages));
//strBuf.append("1 "+"2 "+"3 "+"..."+(totalPages-1)+" "+totalPages);
}
else{
for(int i=1;i<=totalPages;i++){
if (i == currentPage) {
strBuf.append("<span class=\"current\">" + i + "</span>");
}
else {
strBuf.append(goHref(i));
}
//strBuf.append(i+" ");
}
}
}
else{
if(currentPage<6){
for(int i=1;i<=currentPage+1;i++){
if (i == currentPage) {
strBuf.append("<span class=\"current\">" + i + "</span>");
}
else {
strBuf.append(goHref(i));
}
//strBuf.append(i+" ");
}
strBuf.append("<span class=\"gap\">…</span>");
strBuf.append(goHref(totalPages - 1));
strBuf.append(goHref(totalPages));
//strBuf.append("..."+(totalPages-1)+" "+totalPages);
}
else{
if(currentPage<=(totalPages-5)){
strBuf.append(goHref(1));
strBuf.append(goHref(2));
strBuf.append(goHref(3));
strBuf.append("<span class=\"gap\">…</span>");
strBuf.append(goHref(currentPage - 1));
strBuf.append("<span class=\"current\">" + currentPage + "</span>");
strBuf.append(goHref(currentPage + 1));
strBuf.append("<span class=\"gap\">…</span>");
strBuf.append(goHref(totalPages - 1));
strBuf.append(goHref(totalPages));
//strBuf.append("1 "+"2 "+"..."+(currentPage-1)+" "+currentPage+" "+(currentPage+1)+"..."+(totalPages-1)+" "+totalPages);
}
else{
if(currentPage==totalPages||currentPage==(totalPages-1)){
strBuf.append(goHref(1));
strBuf.append(goHref(2));
strBuf.append(goHref(3));
strBuf.append("<span class=\"gap\">…</span>");
strBuf.append(goHref(totalPages - 2));
if(currentPage==totalPages){
strBuf.append(goHref(totalPages -1));
strBuf.append("<span class=\"current\">" + currentPage + "</span>");
}
else{
strBuf.append("<span class=\"current\">" + currentPage + "</span>");
strBuf.append(goHref(totalPages));
}
//strBuf.append("1 "+"2 "+"..."+(totalPages-2)+" "+(totalPages-1)+" "+totalPages);
}
if(currentPage==(totalPages-2)){
strBuf.append(goHref(1));
strBuf.append(goHref(2));
strBuf.append(goHref(3));
strBuf.append("<span class=\"gap\">…</span>");
strBuf.append(goHref(totalPages - 3));
strBuf.append("<span class=\"current\">" + currentPage + "</span>");
//strBuf.append(goHref(totalPages - 2));
strBuf.append(goHref(totalPages - 1));
strBuf.append(goHref(totalPages));
//strBuf.append("1 "+"2 "+"..."+(totalPages-3)+" "+(totalPages-2)+" "+(totalPages-1)+" "+totalPages);
}
if(currentPage==(totalPages-3)){
strBuf.append(goHref(1));
strBuf.append(goHref(2));
strBuf.append(goHref(3));
strBuf.append("<span class=\"gap\">…</span>");
strBuf.append(goHref(totalPages - 4));
strBuf.append("<span class=\"current\">" + currentPage + "</span>");
//strBuf.append(goHref(totalPages - 3));
strBuf.append(goHref(totalPages - 2));
strBuf.append(goHref(totalPages - 1));
strBuf.append(goHref(totalPages));
//strBuf.append("1 "+"2 "+"..."+(totalPages-4)+" "+(totalPages-3)+" "+(totalPages-2)+" "+(totalPages-1)+" "+totalPages);
}
if(currentPage==(totalPages-4)){
strBuf.append(goHref(1));
strBuf.append(goHref(2));
strBuf.append(goHref(3));
strBuf.append("<span class=\"gap\">…</span>");
strBuf.append(goHref(totalPages - 5));
strBuf.append("<span class=\"current\">" + currentPage + "</span>");
//strBuf.append(goHref(totalPages - 4));
strBuf.append(goHref(totalPages - 3));
strBuf.append(goHref(totalPages - 2));
strBuf.append(goHref(totalPages - 1));
strBuf.append(goHref(totalPages));
//strBuf.append("1 "+"2 "+"..."+(totalPages-5)+" "+(totalPages-4)+" "+(totalPages-3)+" "+(totalPages-2)+" "+(totalPages-1)+" "+totalPages);
}
}
}
}
}
//显示下-页
if (currentPage != totalPages&&totalPages!=0) {
strBuf.append("<a href=\"" + getHref(currentPage + 1)+ "\" class=\"next_page\" rel=\"next\">" + NEXT_PAGE+ "</a>");
} else {
strBuf.append("<span class=\"disabled next_page\">" + NEXT_PAGE+ "</span>");
}
strBuf.append("</div>");
return strBuf.toString();
}
/*
* get set
*/
//总行数
public void setTotalRows(int totalRows) {
this.totalRows = totalRows;
}
public int getTotalRows() {
return totalRows;
}
//每页显示的行数
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getPageSize() {
return pageSize;
}
//当前页号
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public int getCurrentPage() {
return currentPage;
}
//总页数
public void setTotalPages(int totalPages) {
this.totalPages = totalPages;
}
public int getTotalPages() {
return totalPages;
}
//当前页在数据库中的起始行
public void setStartRow(int startRow) {
this.startRow = startRow;
}
public int getStartRow() {
return startRow;
}
}
(2)、UserAction.java
private Page page;
private String pagema;
//显示初始用户列表
public String getuserlist() throws Exception {
ActionContext ctx = ActionContext.getContext();
Map m=ctx.getSession();
m.put("search_keyword",null);
m.put("search_cat",null);
String hql_1="select u.id,u.name,u.password,u.sex,u.email,u.question,u.answer,u.regdate,s.shiname ";
String hql_2="from User as u left join u.shi as s";//u.shi多对一的关系,不是nn.bbs.vo.Shi,不必写where u.shi.shiid=s.shiid
String hql_3=" order by u.regdate desc";
String hql_4=hql_1+hql_2+hql_3;
//String hql_3=hql_1+"from User as u,Shi as s where u.shi.shiid=s.shiid";
String hql_5="select count(*) "+hql_2;
page=userService.getuserlist(hql_5,20);//默认一页显示20条数据
userList=new ArrayList();
userList=userService.getTheUserList(page.getPageSize(),page.getStartRow(),hql_4);
m.put("gettheexcel",userList);//为了导出数据
pagema=page.showPagema();//显示分页码
return SUCCESS;
}
(3)、userlist.html
<link href="css/page.css" type=text/css rel=stylesheet>
${pagema?if_exists}
(4)、
.pagination {
PADDING-RIGHT: 5px; PADDING-LEFT: 5px; FLOAT: right; PADDING-BOTTOM: 5px; PADDING-TOP: 5px
}
.pagination A {
BORDER-RIGHT: #aaaadd 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #aaaadd 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; MARGIN: 2px; BORDER-LEFT: #aaaadd 1px solid; COLOR: #006699; PADDING-TOP: 2px; BORDER-BOTTOM: #aaaadd 1px solid; TEXT-DECORATION: none
}
.pagination A:link {
BORDER-RIGHT: #aaaadd 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #aaaadd 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; MARGIN: 2px; BORDER-LEFT: #aaaadd 1px solid; COLOR: #006699; PADDING-TOP: 2px; BORDER-BOTTOM: #aaaadd 1px solid; TEXT-DECORATION: none
}
.pagination A:visited {
BORDER-RIGHT: #aaaadd 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #aaaadd 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; MARGIN: 2px; BORDER-LEFT: #aaaadd 1px solid; COLOR: #006699; PADDING-TOP: 2px; BORDER-BOTTOM: #aaaadd 1px solid; TEXT-DECORATION: none
}
.pagination A:hover {
BORDER-RIGHT: #006699 1px solid; BORDER-TOP: #006699 1px solid; BORDER-LEFT: #006699 1px solid; COLOR: #000; BORDER-BOTTOM: #006699 1px solid; TEXT-DECORATION: none
}
.pagination A:active {
BORDER-RIGHT: #006699 1px solid; BORDER-TOP: #006699 1px solid; BORDER-LEFT: #006699 1px solid; COLOR: #000; BORDER-BOTTOM: #006699 1px solid; TEXT-DECORATION: none
}
.pagination SPAN.current {
BORDER-RIGHT: #006699 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #006699 1px solid; PADDING-LEFT: 5px; FONT-WEIGHT: bold; PADDING-BOTTOM: 2px; MARGIN: 2px; BORDER-LEFT: #006699 1px solid; COLOR: #fff; PADDING-TOP: 2px; BORDER-BOTTOM: #006699 1px solid; BACKGROUND-COLOR: #006699
}
.pagination SPAN.disabled {
BORDER-RIGHT: #eee 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #eee 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; MARGIN: 2px; BORDER-LEFT: #eee 1px solid; COLOR: #ddd; PADDING-TOP: 2px; BORDER-BOTTOM: #eee 1px solid
}
具体代码下载ssb_bbs.rar