JavaBean实例15:分页导航

在开发过程中,很多功能模块显示数据的部分都需要分页显示,而且分页部分的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+"条记录 &nbsp;&nbsp;&nbsp;&nbsp;";
		if( this.hasBefore ){//如果有上一页,添加上一页的超链接代码		
			linkHTML += "<a href='"+this.pageURL+"?currPage=1'>首页</a>";
			linkHTML += "&nbsp;&nbsp;&nbsp;&nbsp;";
			linkHTML += "<a href='"+this.pageURL+"?currPage="+this.currentPage+"&action=before'>上一页</a>";
			linkHTML += "&nbsp;&nbsp;&nbsp;&nbsp;";
		} else{				//如果没有上一页
			linkHTML += "首页  &nbsp;&nbsp;&nbsp;&nbsp;上一页&nbsp;&nbsp;&nbsp;&nbsp;"; 
		}
		if( this.hasNext ){	//如果有下一页,添加下一页的超链接代码
			linkHTML += "<a href='"+this.pageURL+"?currPage="+this.currentPage+"&action=next'>下一页</a>";
			linkHTML += "&nbsp;&nbsp;&nbsp;&nbsp;";
			linkHTML += "<a href='"+this.pageURL+"?currPage="+this.totalPage+"'>尾页</a>";
			linkHTML += "&nbsp;&nbsp;&nbsp;&nbsp;";
		} else {			//没有下一页
			linkHTML += "下一页  &nbsp;&nbsp;&nbsp;&nbsp;尾页&nbsp;&nbsp;&nbsp;&nbsp;"; 
		}
		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.结果:
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
1.第一步:导入paging.jar包。 2.第一步:调用; //通过调用不同的构造函数生成不同导航字符串 PageControl pageControl = new PageControl("PageTest", page, 30); //数字列表导航形式,首尾页时仍显示上一页,下一页(默认形式) PageControl pageControl2 = new PageControl("PageTest", page, 30, false); //数字列表导航形式,首尾页时不显示上一页,下一页 PageControl pageControl3 = new PageControl("PageTest", page, 30, false, false);//数字列导航表形式,不显示首尾页 PageControl pageControl4 = new PageControl("PageTest", page, 30, PageType.WORDTYPE);//文字导航形式 PageControl pageControl5 = new PageControl("PageTest", page, 30, false, PageType.WORDTYPE);//文字导航形式,不显示首尾页 request.setAttribute("pageControlNumberType1", pageControl.pageControl()); request.setAttribute("pageControlNumberType2", pageControl2.pageControl()); request.setAttribute("pageControlNumberType3", pageControl3.pageControl()); request.setAttribute("pageContrlWordType4", pageControl4.pageControl()); request.setAttribute("pageContrlWordType5", pageControl5.pageControl()); request.getRequestDispatcher("index.jsp").forward(request, response); 3.第三步:通过jstl显示: 数字列表导航形式,首尾页时仍显示上一页,下一页(默认形式):${pageControlNumberType1 }<br/> 数字列表导航形式,首尾页时不显示上一页,下一页:${pageControlNumberType2 }<br/> 数字列表导航形式,不显示首尾页:${pageControlNumberType3 }<br/> 文字导航形式:${pageContrlWordType4 }<br/> 文字导航形式,不显示首尾页:${pageContrlWordType5 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员小牧之

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值