JSP交互---分页查询(基本分页查询)

1、新建分页工具类 PageBean

public class PageBean {
    /**
     * 当前页 的 页号
     */
    private Integer pageNo;
    /**
     * 分页显示条数   设置默认值()
     */
    private Integer pageSize=30;
    /**
     * 当前页数据在数据库查询的起始行(在数据库使用limit 查询的第一个数据)
     */
    private Integer start;
    /**
     * 总页数
     */
    private Integer totalPage;
    /**
     * 总条数
     */
    private Integer count;
    /**
     * 分页(当前页)显示的信息
     */
    private List list =new ArrayList();
    /**
     * (当前页的)上一页页号
     */
    private Integer previous;
    /**
     * (当前页的)下一页页号
     */
    private Integer next;



    public Integer getPageNo() {
        return pageNo;
    }
    public void setPageNo(Integer pageNo) {
        this.pageNo = pageNo;
    }
    public Integer getPageSize() {
        return pageSize;
    }
    public void setPageSize(Integer pageSize) {
        this.pageSize = pageSize;
    }
    public Integer getTotalPage() {
        return totalPage;
    }
    public void setTotalPage(Integer totalPage) {
        this.totalPage = totalPage;
    }
    public Integer getCount() {
        return count;
    }
    /**
     * 设置总条数 (根据总条数  对 PageBean 进行其他数据设置)
     * (重点)
     * @param count
     */
    public void setCount(Integer count) {
        this.count = count;
        //设置总页数
        totalPage=count%pageSize==0?count/pageSize:count/pageSize+1;
        //验证页号 
        if(pageNo<0){
            pageNo=1;
        }else if(pageNo>totalPage){
            pageNo=totalPage;
        }

        //确认当前页 上页页号
        //如果当前页页号 >1 它的上一页页号是 pageNo-1
        //否则 那么它的上一页页号是它自己
        if(pageNo>1){
            previous=pageNo-1;
        }else{
            previous=1;
        }

        //确认当前页 下页页号
        //如果当前页页号 < 总页数 它的下一页页号是 pageNo+1
        //否则 那么它的下一页页号是它自己
        if (pageNo<totalPage) {
            next=pageNo+1;
        } else {
            next=pageNo;
        }

        //确认当前页数据在数据库查询的起始行
        //进行判定是为了防止 总页数totalPage为0的情况下--->在验证页号时 对当前页号进行pageNo进行从新赋值为0
        //传入的pageNo 为1(默认);  
        if(pageNo>0){
            start = (pageNo - 1) * pageSize;
        }else{
            start=0;
        }
    }
    public Integer getStart() {
        return start;
    }
    public void setStart(Integer start) {
        this.start = start;
    }
    public List getList() {
        return list;
    }
    public void setList(List list) {
        this.list = list;
    }
    public Integer getPrevious() {
        return previous;
    }
    public void setPrevious(Integer previous) {
        this.previous = previous;
    }
    public Integer getNext() {
        return next;
    }
    public void setNext(Integer next) {
        this.next = next;
    }

}

2、在UserServiceImpl—–>用户表的业务逻辑类 中添加分页查询方法

     /**
     * 分页查询
     * 获取当前页 用户
     * @return
     */
    public PageBean getAll(int pageNo) {
        //新建 分页类的 实例
        PageBean pb = new PageBean();

        //写入当前页号 (先写入当前页页号---注意)
        pb.setPageNo(pageNo);

        //写入总条数---调用数据持久化层的 获取总条数方法(select count(*) from user;)
        //umi是---->private UserDao umi = new UserMysqlImpl();数据持久化层接口的实现类的实例
        pb.setCount(umi.getUserCount());

        //查询  写入分页(当前页)显示的信息
        //调用数据持久化层的 分页查询方法(select * from smbms_user limit ?,?)
        //getAll(int start,int pageSize)
        pb.setList(umi.getAll(pb.getStart(), pb.getPageSize()));

        return pb;
    }

3、新建查询 用户的 servlet—–>UserListServlet

public class UserListServlet extends HttpServlet {
    //创建全局变量 PageBean工具类的实例
    PageBean pb=new PageBean();

    //重写 doPost 方法 (这里就只重写了一个----->编码过滤器和session过滤器省略)
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 获取页号
        //默认 初始值为1
        int pageNo = 1;
        //从页面获取页号 数据
        if (request.getParameter("pageNo") != null) {
            pageNo = Integer.parseInt(request.getParameter("pageNo"));
        }
        //当前页   limit 数据  
        //下面创建的是 User  业务逻辑类的实例
        UserServiceImpl usi = new UserServiceImpl();

        //根据 页号查询当前页的信息(在业务逻辑类的方法中 为当前页设置 关于当前的一些信息)
        pb = usi.getAll(pageNo);
        //写入数据  传到页面(传回页面的是 PageBean 的示例)       
        request.setAttribute("pb", pb);

        request.getRequestDispatcher("/jsp/userList.jsp").forward(request,
                response);

    }
}

4、在jsp页面 对接收到的 页面信息 进行输出

<!--对 控制器传回的 PageBean 实例进行数据处理-->
<!-- PageBean 的 list 属性 储存了当前页 要展示的实体类 User类的集合-->
<!-- 运用 c:forEach 对 list 进行遍历 items="${requestScope.pb.list }"-->
<c:forEach var="user" items="${requestScope.pb.list }" varStatus="row">
        <tr>
            <td height="23"><span class="STYLE1">${user.id }</span></td>
            <td><span class="STYLE1"><a href="UserViewServlet?userId=${user.id}"> ${user.name }</a>
                </span></td>
            <td><span class="STYLE1"> ${user.loginName } </span></td>
            <td><span class="STYLE1"> ${user.gender==1?"男":"女" }</span></td>
            <td><span class="STYLE1"> ${user.age }</span></td>
            <td><span class="STYLE1">${user.phone }</span></td>
            <td><span class="STYLE1"> ${user.type==1?"管理员":"普通员工"} </span></td>
        </tr>

</c:forEach>
            <a href="UserListServlet?pageNo=1">首页</a>
            <a href="UserListServlet?pageNo=${requestScope.pb.previous } ">上一页</a>
            <a href="UserListServlet?pageNo=${requestScope.pb.next}">下一页</a>
            <a href="UserListServlet?pageNo=${requestScope.pb.totalPage} ">末页</a>
            当前第${requestScope.pb.pageNo }页 , 总页数:${requestScope.pb.totalPage} ,总条数:${requestScope.pb.count}

传到页面的是PageBean 的实例 这个实例 储存了当前页的一些信息:

    /**
     * 当前页 的 页号
     */
    private Integer pageNo;
    /**
     * 分页(当前页)显示的信息
     */
    private List list =new ArrayList();
    /**
     * (当前页的)上一页页号
     */
    private Integer previous;
    /**
     * (当前页的)下一页页号
     */
    private Integer next;

其余信息不作特别列出
根据 上一页 下一页 传回的页号 对 PageBean 的实例 pb 进行更新

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值