J2EE通用分页

本文详细介绍了J2EE中实现分页的方法,包括PageBean分页封装类的创建,用于存储分页参数和操作;PageTag自定义分页标签的使用,利用BodyTagSupport实现页面展示;以及Jsp界面如何展示分页结果。通过这些步骤,可以有效地在前端实现动态分页功能。
摘要由CSDN通过智能技术生成

目录

一、PageBean分页封装类

二、PageTag分页标签

三、Jsp界面


一、PageBean分页封装类


首先我们得明确前端分页我们需要如何实现,以下是我实现前端分页的思路和方法
1.需要新增变量保存上一次的请求地址
2.需要拿到第一次查询的条件
  

  //需要新增变量保存上一次的请求地址
    private String Url ;
    //需要新增变量保存上一次的查询条件
     private Map<String, String[]> parameterMap = new HashMap<String, String[]>();


思路:因为我们可能拿到的是多个条件的值,所以返回的是一个字符串数组,同时用Map集合进行存储
3.需要添加方法,获取最大页的页码:看不懂可以看注释

public int MaxPage() {
        //将总数据数除以总行数 如果等于0说明能除尽就拿到这个值,
        //如果不能除尽就在这值的基础上加1
        return this.total%this.rows==0?
                this.total/this.rows:
                    this.total/this.rows+1;
    }


  4.需要添加方法,获取下一页的页码:看不懂可以看注释

public int nextPage() {
        //如果当前页数小于最大页数说明还有下一页的值,就+1代表下一页,
        //如果大于最大页就停留在当前页
        return this.page<this.MaxPage()?this.page+1:this.page;
    }


5.需要添加方法,获取上一页的页码:看不懂可以看注释

public int previousPage() {
        //如果当前页数大于1说明还有上一页的值,就-1代表上一页
        //如果小于1就停留在当前页
        return this.page>1?this.page-1:this.page;
    }


同时我们在分页的封装类定义一个存值的方法,将分页所需要的五个变量或者方法(页码page、rows页大小、是否分页pagination、地址Url、查询条件ParameterMap)进行存储,然后再Servlet中直接调用这个方法就可以了

public void setRequest(HttpServletRequest request) {
        this.setPage(request.getParameter("page"));
        this.setRows(request.getParameter("rows"));
        this.setPagination(request.getParameter("pagination"));
        this.setUrl(request.getRequestURL().toString());
        this.setParameterMap(request.getParameterMap());
    }
    private void setPagination(String pagination) {
        if(StringUtils.isNotBlank("pagination")) {
            this.setPagination(!"false".equals(pagination));
        }
        
    }
    private void setRows(String rows) {
        if(StringUtils.isNotBlank(rows)) {
            this.setRows(Integer.valueOf(rows));
        }
            
        
    }
    private void setPage(String page) {
        if(StringUtils.isNotBlank(page))
            //set自动生成的方法
            this.setPage(Integer.valueOf(page));
            
    }


二、PageTag分页标签


我们运用之前所分享的自定义jsp标签的知识来自定义一个Page标签,PageTag继承 BodyTagSupport类,用stringbuffer中的append方法来实现页面展示效果。最后我们只要在jsp页面引用PageTag标签就可以了

package com.dgl.tag;
 
import java.io.IOException;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
 
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;
 
import com.dgl.util.PageBean;
 
public class PageTag extends BodyTagSupport{
    private PageBean pageBean;
    
    public PageBean getPageBean() {
        return pageBean;
    }
 
    public void setPageBean(PageBean pageBean) {
        this.pageBean = pageBean;
    }
 
    @Override
    public int doStartTag() throws JspException {
        JspWriter out = pageContext.getOut();
        try {
            out.print(toHTML());
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return super.doStartTag();
    }
 
    private String toHTML() {
        StringBuffer sb = new StringBuffer();
//        隐藏的form表单,作用保存上一次查询条件
        sb.append("<form action='"+pageBean.getUrl()+"' id='pageBeanForm' method='post'>");
        sb.append("    <input type='hidden' name='page' value=''>");
        Map<String, String[]> parameterMap = pageBean.getParameterMap();
        if(parameterMap != null && parameterMap.size() > 0) {
            Set<Entry<String, String[]>> entrySet = parameterMap.entrySet();
            for (Entry<String, String[]> entry : entrySet) {
                String key = entry.getKey();// name/likes/page/rows
                String[] values = entry.getValue();
                if(!"page".equals(key)) {
                    for (String value : values) {
                        sb.append("    <input type='hidden' name='"+key+"' value='"+value+"'>");
                    }
                }
            }
        }
        sb.append("</form>");
        
//        分页条
        sb.append("<ul class='pagination justify-content-center'>");
        sb.append("    <li class='page-item "+(pageBean.getPage() == 1 ? "disabled" : "")+"'><a class='page-link'");
        sb.append("        href='javascript:gotoPage(1)'>首页</a></li>");
        sb.append("    <li class='page-item "+(pageBean.getPage() == 1 ? "disabled" : "")+"'><a class='page-link'");
        sb.append("        href='javascript:gotoPage("+pageBean.previousPage()+")'>&lt;</a></li>");
        sb.append("    <li class='page-item active'><a class='page-link' href='#'>"+pageBean.getPage()+"</a></li>");
        sb.append("    <li class='page-item "+(pageBean.getPage() == pageBean.MaxPage() ? "disabled" : "")+"'><a class='page-link' href='javascript:gotoPage("+pageBean.nextPage()+")'>&gt;</a></li>");
        sb.append("    <li class='page-item "+(pageBean.getPage() == pageBean.MaxPage() ? "disabled" : "")+"'><a class='page-link' href='javascript:gotoPage("+pageBean.MaxPage()+")'>尾页</a></li>");
        sb.append("    <li class='page-item go-input'><b>到第</b><input class='page-link'");
        sb.append("        type='text' id='skipPage' name='' /><b>页</b></li>");
        sb.append("    <li class='page-item go'><a class='page-link'");
        sb.append("        href='javascript:skipPage()'>确定</a></li>");
        sb.append("    <li class='page-item'><b>共"+pageBean.getTotal()+"条</b></li>");
        sb.append("</ul>");
        
//        分页js代码
        sb.append("<script type='text/javascript'>");
        sb.append("    function gotoPage(page) {");
        sb.append("        document.getElementById('pageBeanForm').page.value = page;");
        sb.append("        document.getElementById('pageBeanForm').submit();");
        sb.append("    }");
        sb.append("    function skipPage() {");
        sb.append("        var page = document.getElementById('skipPage').value;");
        sb.append("        if (!page || isNaN(page) || parseInt(page) < 1");
        sb.append("                || parseInt(page) > "+pageBean.MaxPage()+") {");
        sb.append("                alert('请输入1~"+pageBean.MaxPage()+"的数字');");
        sb.append("            return;");
        sb.append("        }");
        sb.append("        gotoPage(page);");
        sb.append("    }");
        sb.append("</script>");
        
        
        return sb.toString();
    }
}


 
 
要记得在标签库中定义该标签哦!


三、Jsp界面

我们在Servlet中要调用我们分页的方法以及用   request.setAttribute存值并转发到jsp界面 Servlet中的代码:
  

  
        PageBean pageBean = new PageBean();
        pageBean.setRequest(request);
     
       request.setAttribute("pageBean", pageBean);
       request.getRequestDispatcher("BookList.jsp").forward(request, response);


界面引用:
  

 <z:Page pageBean="${PageBean}"></z:Page>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值