重构Struts2 JSP分页

前两天的Struts2 JSP分页由于过于关注框架实现,导致结构比较混乱。经过一些改动,再次发布。

环境是JDK1.6+mysql5.0+jboss4.0+struts 2.0.11

已经实现上一版没实现的功能。

首先来看UML图,为了简洁性,其中的setter & getter并没有标出。

 
 
 
 
  1. public classShowActionextendsActionSupport{  
  2. privateintcurrentPage = 1;  
  3. privateinttotalPages;  
  4. privatebooleanhasNext =false;  
  5. privatebooleanhasPre = false;  
  6. private ArrayList pageContentList;  
  7. private ArrayList indexList  
  8. private PageRetrieval pr;  
  9. public String execute(){  
  10. init();  
  11. returnSUCCESS;  
  12. }     
  13. privatevoid init(){  
  14. pr = new PageRetrieval(currentPage);  
  15. setPageContentList(pr.getPageContentList());  
  16. setndexList(pr.getIndexList());  
  17. setHasNext(pr.getHasNext());  
  18. setHasPre(pr.getHasPre());  
  19. setTotalPages(pr.getTotalPages());  
  20. }  
  21. //other getters and setters  
  22. }  
  23. publicclass PageRetrieval {  
  24. private PageInformation pi;  
  25. public PageRetrieval(int currentPage){  
  26. pi = new PageInformationFactory().create(currentPage);  
  27.  }  
  28. publicint getTotalPages(){  
  29. returnpi.getPti().getTotalPages();  
  30. //other getters and setters  
  31. }  
  32. publicclass PageInformationFactory {  
  33. private DatabaseServices dataServ;  
  34. public PageInformationFactory(){  
  35. dataServ = MyDatabaseServices.getInstance();  
  36. }  
  37. public PageInformation create(int currentPage){  
  38. PageInformation pi = new PageInformation();  
  39. PageTotalInfo pti = getNewPageTotalInfo();          
  40. pi.setPti(pti);  
  41. if(currentPage < pti.getTotalPages()){  
  42.    pi.setHasNext(true);  
  43. }  
  44.  if(currentPage !=1){  
  45.   pi.setHasPre(true);  
  46.    }   
  47. pi.setPageContentList(((MyDatabaseServices)dataServ).getPageContent(currentPage, pti.getPageSize()));  
  48. ArrayList indexTemp = getIndexList(currentPage,pti.getTotalPages());  
  49. pi.setIndexList(indexTemp);  
  50.   return pi;  
  51.  }  
  52. private PageTotalInfo getNewPageTotalInfo(){  
  53. int pageSize = 20;  
  54. int totalRows = ((MyDatabaseServices)dataServ).getRowCount();  
  55. int totalPages = (totalRows + pageSize-1)/pageSize;  
  56.  returnnew PageTotalInfo(pageSize,totalPages,totalRows);  
  57.  }  
  58. private ArrayList getIndexList(int currentPage,int totalPages){  
  59.    int up = 0;  
  60.    if((currentPage+20)<=totalPages){  
  61.    up = currentPage+20;  
  62.   }  
  63.    else {up = totalPages+1;}  
  64. ArayList result = new ArrayList();  
  65. for(int i=currentPage ;i; i++){  
  66. PageIndex temp = new PageIndex(i);  
  67.  result.add(temp);  
  68.    }  
  69.     return result;  
  70.        }  
  71. }  
  72. publicclass PageInformation {  
  73. privateintcurrentPage;  
  74. privatebooleanhasNext = false;  
  75. privatebooleanhasPre = false;  
  76. private ArrayList pageContentList;  
  77. private ArrayList indexList;  
  78. private PageTotalInfo pti;  
  79. //other getters and setters  
  80. }  
  81. publicclass MyDatabaseServices implements DatabaseServices{  
  82. private DataSource ds;  
  83. private InitialContext ic;  
  84. private Connection conn;  
  85. private PreparedStatement ps;  
  86. private ResultSet rs;  
  87. privatestatic MyDatabaseServices dgs = new MyDatabaseServices();  
  88. private MyDatabaseServices(){//use singleton pattern, so the constructor is private  
  89. try{  
  90. ic = new InitialContext ();  
  91. ds = (DataSource)ic.lookup("java:jdbc/jsp");//get database source  
  92.   }catch(NamingException e){  
  93.    e.printStackTrace();  
  94.   }  
  95. }  
  96. public Connection getConnection(){  
  97.   try{  
  98.     returnds.getConnection();  
  99. }catch(SQLException e){  
  100. e.printStackTrace();  
  101. }  
  102. returnnull;  
  103. }  
  104. public void closeConnection(ResultSet rs,PreparedStatement ps,Connection conn){  
  105.    try{  
  106.    if(rs!=null){  
  107.         rs.close();  
  108.    }  
  109.  if(ps!=null){  
  110.      ps.close();  
  111.     }  
  112.       if(conn!=null){  
  113.     conn.close();  
  114.  }  
  115. }catch(SQLException e ){  
  116. e.printStackTrace();  
  117. }  
  118. }  
  119. public ArrayList getPageContent(int currentPage,int pageSize){  
  120.  ArrayList list=new ArrayList();  
  121.  conn = getConnection();  
  122.  try{  
  123. ps = conn.prepareStatement("SELECT * FROM jsptest LIMIT ?,?");  
  124.  int temp = (currentPage-1)*20;  
  125.   ps.setInt(1, temp);  
  126.    ps.setInt(2, pageSize);  
  127.    rs = ps.executeQuery();  
  128.     while (rs.next()){  
  129.       User user = new User();  
  130.       user.setId(rs.getString(1));  
  131.       user.setName(rs.getString(2));  
  132.       list.add(user);  
  133.     }  
  134.    return list;  
  135. }catch(SQLException e){  
  136.    e.printStackTrace();  
  137. }finally{  
  138.   dgs.closeConnection(rs, ps, conn);  
  139. }  
  140. returnnull;  
  141. }  
  142. publicint getRowCount(){  
  143.   conn = getConnection();  
  144. try{  
  145. ps = conn.prepareStatement("SELECT * FROM jsptest");  
  146. rs = ps.executeQuery();  
  147. rs.last();  
  148. int result = rs.getRow();  
  149. rs.first();  
  150. return result;  
  151. }catch(SQLException e){  
  152.     e.printStackTrace();  
  153. }finally{  
  154.     dgs.closeConnection(rs, ps, conn);  
  155. }  
  156. return 0;  
  157. }  
  158. publicstaticsynchronized MyDatabaseServices getInstance()//get the sigleton instance  
  159. {  
  160.    if(null==dgs){  
  161.        dgs= new MyDatabaseServices();  
  162.        }   
  163.    returndgs;  
  164. }  

PageIndex 和PageTotalInfo 只要对照UML图加上set和get方法就可以了。

代码可能有点乱,对照UML图看吧。

如果要重用,只要改变Struts2 JSP页面,以及下面的MyDatabaseServices的具体实现,还有就是把USER替换成你需要显示的数据。

最后以下是JSP页面代码。

 
 
 
 
  1. <%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
  2.     pageEncoding="ISO-8859-1"%> 
  3. <%@ taglib prefix="s" uri="/struts-tags" %> 
  4.  
  5.  
  6.  http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
  7. </strong>Insert title here<strong> 
  8.  
  9.  
  10.  action="ShowAction" method="GET"> 
  11.    

    Welcome


     
  12.    

    CurrentPage  value="currentPage"/>

  13.     
  14.     value="pageContentList" status="status"> 
  15.          value="id"/> 
  16.          value="name"/> 
  17.         
     
  18.                  
  19.     
  20.       id="url_pre" value="ShowAction.action"> 
  21.           name="currentPage" value="currentPage-1"> 
  22.       
  23.       id="url_next" value="ShowAction.action"> 
  24.           name="currentPage" value="currentPage+1"> 
  25.       
  26.       id="url_first" value="ShowAction.action"> 
  27.           name="currentPage" value="1"> 
  28.         
  29.       id="url_last" value="ShowAction.action"> 
  30.           name="currentPage" value="totalPages"> 
  31.       
  32.          
  33.     href ="%{url_first}">First Page 
  34.     test="hasPre">      
  35.     href="%{url_pre}">Pre 
  36.     
  37.     value="indexList" status="status"> 
  38.        id="url" value="ShowAction.action"> 
  39.        
  40.           name="currentPage" value="indexNumber"> 
  41.        
  42.        href="%{url}"> value="indexNumber"/>  
  43.     
  44.     test="hasNext"> 
  45.     href="%{url_next}">Next 
  46.     
  47.        href ="%{url_last}">Last Page 
  48.     
  49.  
  50.  

以上是Struts2 JSP分页可能还有不尽人意之处,大家多多指点,一起进步。

【编辑推荐】

  1. JSP XML XSLT将输出转换HTML
  2. 浅析JSP技术单处理和多任务处理
  3. JSP变量在规范中称作范围变量
  4. 详解JSP技术的方法
  5. JSP变量在规范中称作范围变量

网站栏目:重构Struts2 JSP分页
分享地址:http://www.mswzjz.cn/qtweb/news40/431790.html

攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能