Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 1079|回复: 0

使用Java自定义标签实现分页功能

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2011-6-6 14:45:16 | 显示全部楼层 |阅读模式
       许多进行javaEE开发的程序爱好者,就知道在JSP页面直接实现分页功能是不方便的,尤其是要使用request对象传递currentPage值更是达不到应有的效果。本人通过实践终于实现了使用java自定义标签实现分页功能,并且可以通过建立不同相对应的类来同时实现多种分页。我现在把它总结出来,一则以后可以使用,二则也可以给大家提供参考。欢迎转载,也欢迎跟帖发表更多的实现方法。
    以下通过实现用户遍历的实例来讲述
       步骤:
      1,建立自定标签类
       在src路径下,建立包com.sg.common,在此包下建立类:UserEvalPage.java继承javax.Servlet.jsp.tagext.TagSupport类,重写方法public int doEndTag(),返回值必须为EVAL_PAGE,方法的实现如下:
       //从容器中获取输出对象,pageContext对象为父类静态属性
      JspWriter out = pageContext.getOut();
      //获取session对象
      HttpSession session = pageContext.getSession();
      //定义分页的类型
      String type = "User";
       //定义并赋值给action
      String action = "CommonShowPageServlet";
        //定义总页数
      int total = 0;
      //定义当前页数为1
      int currentPage = 1;

      //定义当前页为null
      String curPage = null;
      //从session中取出当前页
      if(session.getAttribute(type+"CurrentPage") != null){
       curPage = session.getAttribute(type+"CurrentPage").toString();
      }
    //将当前页数转换为整数
      if(curPage != null){
       Integer aa = Integer.parseInt(curPage);
       currentPage = aa.intValue();
      }
      //将currentPage的数据清除掉,免得占用内存
      session.removeValue("UserCurrentPage");

      //从数据库中读取用户列表
      UserDao userDao = new UserDaoImpl();
      List list = userDao.getUserList();
      //通过下面几种情况得到总页数
      if(list.size() == 0)
       total = 1;
      if(list.size()%10 == 0)
       total = list.size()/10;
      if(list.size()%10 != 0)
       total = list.size()/10+1;


         try {
       out.print("<a href="+action+"?"+type+&quotage="+1+"&type="+type+">首页</a>    ");
       if(currentPage > 1)
       out.print("<a href="+action+"?"+type+"Page="+(currentPage-1)+"&type="+type+">上一页</a>    ");
       else
       out.print("上一页    ");
       if(currentPage < total)
       out.print("<a href="+action+"?"+type+"Page="+(currentPage+1)+"&type="+type+">下一页</a>    ");
       else
       out.print("下一页    ");
       out.print("<a href="+action+"?"+type+"Page="+total+"&type="+type+">尾页</a>    ");   
      } catch (IOException e) {
       e.printStackTrace();
      }  
      return EVAL_PAGE;
    2,部署自定义标签类
      在WEB-INF文件夹下面新建文件夹:tld,在tld文件夹下建立文件HelloTag.tld,然后再部署自定义标签类:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE taglib
      PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
       "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
        <!-- a tab library descriptor -->
    <taglib xmlns="http://java.sun.com/JSP/TagLibraryDescriptor">
      <tlib-version>1.0</tlib-version>
      <jsp-version>1.2</jsp-version>
      <short-name>Simple Tags</short-name>
       <uri>http://mytag.HelloTag.com</uri>
       <tag>
        <name>UserPage</name>//标签名称
        <tag-class>mathmodel.sg.common.showPage.UserEvalPage</tag-class>//标签类路径
      </tag>
    </taglib>
    3,创建业务类
      在src目录下建立包:com.sg.biz。在包下建立业务类:UserBiz.java,其中有实现方法public List getUserListByPage(int page):
    //创建通过page获取的用户列表
      List listUser = new ArrayList();
    //从数据库中读取所有的用户列表
      UserDao userDao = new UserDaoImpl();
      List list = userDao.getUserList();
    //定义总页数
      int totalpage = 0;
      if(list.size() == 0){
       totalpage = 1;
      }
      if(list.size()%10 == 0){
       totalpage = list.size()/10;
      }
      if(list.size()%10 != 0){
       totalpage = list.size()/10+1;
      }
      //如果当前页面为尾页,总页数不为1
      if(page == totalpage && totalpage !=1){
       for(int j = (page-1)*10;j<list.size();j++){
        User user = (User)list.get(j);
           listUser.add(user);   
       }
      }
      //如果总页数为1,当前页数为1
      else if(totalpage == 1 && page == 1){
       for(int k = 0;k<list.size();k++){
        User user = (User)list.get(k);
           listUser.add(user);   
       }
      }
      //如果总页数不为1,当前页数为1
      else if(totalpage != 1 && page == 1){
          for(int i=0;i< page*10;i++){
           User user = (User)list.get(i);
           listUser.add(user);
         }
      }
      else{
       for(int y = (page-1)*10;y < page*10;y++){
        User user = (User)list.get(y);
        listUser.add(user);
       }
      }
      return listUser;
    4,创建公用的servlet
    在src目录下,建立包:com.sg.servlet,在包下新建CommonShowPageServlet.java
      实现其中的doGet(HttpServletRequest request,HttpServletResponse response)方法(doPost()方法与其相同):
      //设置请求参数的字符集
       request.setCharacterEncoding("gbk");
      //从标签中获取分页的类型
      String type = request.getParameter("type");
      //定义当前页数
      int currentpage = 0;
      //获取传递的当前页参数
      String page = request.getParameter(type+"Page");//MovePicPage
    //如果传递的当前页数为空,则当前页为1
      if(page == null){
       currentpage = 1;
      }else{
       currentpage = Integer.parseInt(request.getParameter(type+"Page"));
      }
      //将当前页数保存到session中
      HttpSession session = request.getSession();
      session.setAttribute(type+"CurrentPage", currentpage);
    //通过不同种分页,获取不同的列表
      if(type.equals("User")){
       UserBiz userBiz = new UserBiz();
       List list = userBiz.getUserListByPage(currentpage);
       session.setAttribute(type+"List", list);
       response.sendRedirect("index.jsp");
      }
    5.在jsp页面实现显示用户列表
           //从session中获取列表
             List list = (List)session.getAttribute("UserList");
           //如果session中没有值,那么表示当前页数为1
            if(list == null){
              UserBiz userBiz = new UserBiz();
              list = userBiz.getUserListByPage(1);
            }
           //使用完session后,立马消掉session,免得占用内存
           session.removeValue("UserList");
         ....... 接下来就是从list中取用户信息,相信大家都知道了.......
       
    回复

    使用道具 举报

    该用户从未签到

    发表于 2011-6-7 23:06:01 | 显示全部楼层
    不错,学习了哈。。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-13 19:06 , Processed in 0.395102 second(s), 49 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表