在开发过程中,很多功能模块显示数据的部分都需要分页显示,而且分页部分的HTML代码都是相同的,为了提高开发效率以及便于维护,我们可以将这部分分页导航的代码封装到javabean之中。
实现代码如下:
1.JavaBean文件:
page.java
package exa149;
import java.util.Calendar;
public class Page {
private int pageSize = 10; //每页显示的记录数
private int currentPage = 1; //当前页
private int totalPage = 0; //总页数
private int totalRows = 0; //总记录数
private boolean hasBefore = false; //是否有上一页
private boolean hasNext = false ; //是否有下一页
private String linkHTML=""; //用于保存分页导航的HTML代码
private String pageURL; //具体的链接地址
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public int getTotalPage() {
totalPage = ((totalRows + pageSize) - 1) / pageSize;//根据数据总数和每页显示的记录数算出总页数
return totalPage;
}
public int getTotalRows() {
return totalRows;
}
public void setTotalRows(int totalRows) {
this.totalRows = totalRows;
}
public boolean isHasBefore() {
return hasBefore;
}
public void setHasBefore(boolean hasBefore) {
this.hasBefore = hasBefore;
}
public boolean isHasNext() {
return hasNext;
}
public void setHasNext(boolean hasNext) {
this.hasNext = hasNext;
}
public String getPageURL() {
return pageURL;
}
public void setPageURL(String pageURL) {
this.pageURL = pageURL;
}
//单击的是首页
public void firstPage(){
currentPage = 1; //当前页的值为1
this.setHasBefore(false); //没有上一页
this.refresh(); //单击首页时应该设置是否有上一页和下一页
}
//单击的是上一页
public void beforePage(){
currentPage -- ; //当前页的值减1
this.refresh(); //单击上一页时应该设置是否有上一页和下一页
}
//单击的是下一页
public void nextPage(){
if(currentPage < totalPage){
currentPage ++ ; // 当前页的值加1
}
this.refresh(); //单击下一页时应该设置是否有上一页和下一页
}
//单击的是尾页
public void lastPage(){
currentPage = totalPage ; //当前页的值等于总页数
this.setHasNext(false); //没有下一页
this.refresh(); //单击上一页时应该设置是否有上一页和下一页
}
//判断用户的操作,判断是否有上一页和下一页
public void refresh(){
if(totalPage<=1){ //总页数小于等于1的情况,没有上一页和下一页
this.setHasBefore(false);
this.setHasNext(false);
}
else if(currentPage==1){ //当前页为首页,没有上一页,有下一页
this.setHasBefore(false);
this.setHasNext(true);
}
else if(currentPage==totalPage){//当前页为尾页,没有下一页,有上一页
this.setHasBefore(true);
this.setHasNext(false);
}else{//除了以上的所有条件,有上一页和下一页
this.setHasBefore(true);
this.setHasNext(true);
}
}
//获得分页导航代码的方法,主要根据是否有上一页和下一页来判断
public String getLinkHTML() {
linkHTML += "共"+this.totalRows+"条记录 ";
if( this.hasBefore ){//如果有上一页,添加上一页的超链接代码
linkHTML += "<a href='"+this.pageURL+"?currPage=1'>首页</a>";
linkHTML += " ";
linkHTML += "<a href='"+this.pageURL+"?currPage="+this.currentPage+"&action=before'>上一页</a>";
linkHTML += " ";
} else{ //如果没有上一页
linkHTML += "首页 上一页 ";
}
if( this.hasNext ){ //如果有下一页,添加下一页的超链接代码
linkHTML += "<a href='"+this.pageURL+"?currPage="+this.currentPage+"&action=next'>下一页</a>";
linkHTML += " ";
linkHTML += "<a href='"+this.pageURL+"?currPage="+this.totalPage+"'>尾页</a>";
linkHTML += " ";
} else { //没有下一页
linkHTML += "下一页 尾页 ";
}
linkHTML +="当前为"+this.currentPage+"/"+this.totalPage+"页";
return linkHTML;
}
public void setLinkHTML(String linkHTML) {
linkHTML = linkHTML;
}
}
2.jsp文件:
index.jsp
<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="exa149.Page" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<% %>
<%
String currentPage = request.getParameter("currPage");
String action = request.getParameter("action");
int currPage = 1;
if(currentPage !=null){
currPage = Integer.parseInt(currentPage);
}
Page p = new Page();
if(action!=null){
if(action.equals("before")){
p.beforePage();
}
if(action.equals("next")){
p.nextPage();
}
}
out.println(p.getCurrentPage());
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<jsp:useBean id="linkPage" class="exa149.Page" scope="page"></jsp:useBean>
<%
linkPage.setHasBefore(true);
linkPage.setHasNext(true);
linkPage.setPageSize(10);
linkPage.setPageURL("index.jsp");
%>
<jsp:getProperty property="linkHTML" name="linkPage"/><br>
<jsp:getProperty property="currentPage" name="linkPage"/>
</body>
</html>
3.结果: