TA的每日心情  | 开心 2021-3-12 23:18 | 
|---|
 
  签到天数: 2 天 [LV.1]初来乍到  
 | 
 
| 
 
    许多进行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+" age="+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中取用户信息,相信大家都知道了....... 
     |   
 
 
 
 |