分页的自由点击和一整页的翻越

本文介绍了一种基于Java Servlet和JSP技术实现的分页导航功能,可根据用户请求动态展示不同页码,支持前后翻页及跳转至指定页。通过调整显示窗口大小,确保用户体验流畅。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

内容较多时,可以增加首位页进行选择:
在这里插入图片描述
java代码块:
package testPage;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**

  • Servlet implementation class TestPageServlet
    */
    @WebServlet("/TestPageServlet")
    public class TestPageServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**

    • @see HttpServlet#HttpServlet()
      */
      public TestPageServlet() {
      super();
      // TODO Auto-generated constructor stub
      }

    /**

    • @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
    •  response)
      

    */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    // TODO Auto-generated method stub
    List list = new ArrayList();
    int pageNo = 85;// 当前页码
    int totalPage = 90;// 总页码
    int start = 1;// 起始页码
    int end = 1;// 结束页码
    String pageNoParam = request.getParameter(“pageNo”);
    if (pageNoParam != null) {// 如果页码参数不为空,则覆盖默认页码1
    pageNo = Integer.parseInt(pageNoParam);
    }
    String isScroll = request.getParameter(“isScroll”);
    if (isScroll == null) {
    // 假设 显示窗口为 10个页码
    if (totalPage < 10) {// 当总页码 小于等于10的时候==>全部显示
    start = 1;
    end = totalPage;
    } else if (pageNo - 5 <= 1) {// 判断当处在 起始端边界时==>输出前10个页码
    start = 1;
    end = start + 9;
    } else if (pageNo + 4 >= totalPage) {// 判断当处于 结束端 边界时==>从后向前
    // 输出后10个页码
    end = totalPage;
    start = end - 9;
    } else {
    start = pageNo - 5;
    end = pageNo + 4;
    }
    for (int i = start; i <= end; i++) {
    list.add(i);
    }

     } else if (isScroll.equals("1")) {// 向后翻一轮
     	// 先算出 当前的 end值
     	// 接受 参数 end 和 start
     	String endStr = request.getParameter("end");
     	String startStr = request.getParameter("start");
    
     	if (endStr != null && !endStr.trim().equals("")) {
     		end = Integer.parseInt(endStr);
     	} // 将字符串类型转为int型
    
     	if (startStr != null && !startStr.trim().equals("")) {
     		start = Integer.parseInt(startStr);
     	}
     	if (end + 10 > totalPage) {// 如果结束码+10大于总页码==>处于最后一页
     		//System.out.println("22222222222"+end);
     		end = totalPage; // 结束码 就等于 总页数的页码
     		start = totalPage - 9; // 起始码与 结束码 相差 9
     	} else { // 相加不大于总页码 ==>不在最后一页==>可以进行一整页的 翻越
     		//System.out.println("1111111111111"+end);
     		start += 10;
     		end += 10;
     	}
     	pageNo = (start+end)/2+1;
     	
     	for (int i = start; i <= end; i++) {
     		list.add(i);
     	}
     } else {// 向前翻一轮
     	String endStr = request.getParameter("end");
     	String startStr = request.getParameter("start");
    
     	if (endStr != null && !endStr.trim().equals("")) {
     		end = Integer.parseInt(endStr);
     	} // 将字符串类型转为int型
    
     	if (startStr != null && !startStr.trim().equals("")) {
     		start = Integer.parseInt(startStr);
     	}
     	if (start - 10 <1) {//说明==>处于第一页
     		start = 1; 
     		end = start+9; 
     	} else { //不在第一页
     		start -= 10;
     		end -= 10;
     	}
     	pageNo = (start+end)/2+1;
     	for (int i = start; i <= end; i++) {
     		list.add(i);
     	}
     }
     request.setAttribute("pageList", list);
     request.setAttribute("curr_no", pageNo);
     request.setAttribute("totalPageNo", totalPage);
     request.setAttribute("start", start);
     request.setAttribute("end", end);
     request.getRequestDispatcher("Testpage.jsp").forward(request, response);
     ;
    

    }

    /**

    • @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
    •  response)
      

    */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    // TODO Auto-generated method stub
    doGet(request, response);
    }

}

前端块(.jsp文件):
加 首 尾 的 jsp代码
<%@ page language=“java” contentType=“text/html; charset=UTF-8”
pageEncoding=“UTF-8”%>
<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c”%>

页码测试
  • «
  • 		<c:forEach items="${pageList}" var="no">
    			<!-- 当  集合中当前页码 等于页面中的当前页码时,使用一个空函数 使当前页码 不可再点击,使当前超链接失效   "#" 空锚链接,也会刷新页面 -->
    			<c:if test="${curr_no==no}">
    				<li class="active"><a href="javascript:void(0);">${no}</a></li>
    			</c:if>
    
    			<c:if test="${curr_no!= no}">
    				<li><a href="TestPageServlet?pageNo=${no}">${no}</a></li>
    			</c:if>
    		</c:forEach>
    		
    		<c:if test="${end != totalPageNo}"><!-- 说明还没有到达最后的页码==>可以滚动 -->
    			<li><a href="TestPageServlet?isScroll=1&start=${start}&end=${end}"
    				aria-label="Next"> <span aria-hidden="true">&raquo;</span>
    			</a></li>
    			<li><a href="TestPageServlet?pageNo=${totalPageNo}"
    				aria-label="Previous"> <span aria-hidden="true">尾页</span>
    			</a></li>
    		</c:if>
    	</ul>
    </nav>
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值