国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

重構Struts2 JSP分頁

開發 后端
本文介紹重構Struts2 JSP分頁,以及介紹MyDatabaseServices的具體實現,還有就是把USER替換成你需要顯示的數據。

前兩天的Struts2 JSP分頁由于過于關注框架實現,導致結構比較混亂。經過一些改動,再次發布。

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

已經實現上一版沒實現的功能。

首先來看UML圖,為了簡潔性,其中的setter & getter并沒有標出。

class Test JSP

 

  1. public classShowActionextendsActionSupport{  
  2. privateintcurrentPage = 1;  
  3. privateinttotalPages;  
  4. privatebooleanhasNext =false;  
  5. privatebooleanhasPre = false;  
  6. private ArrayList pageContentList;  
  7. private ArrayList<PageIndex> 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<PageIndex> 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<PageIndex> 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<PageIndex> result = new ArrayList<PageIndex>();  
  65. for(int i=currentPage ;i<up; 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<PageIndex> 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<User> getPageContent(int currentPage,int pageSize){  
  120.  ArrayList<User> list=new ArrayList<User>();  
  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.        dgsnew 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. <html> 
  5. <head> 
  6. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
  7. <title>Insert title here</title> 
  8. </head> 
  9. <body> 
  10. <s:form action="ShowAction" method="GET"> 
  11.    <h1>Welcome</h1><BR> 
  12.    <h1>CurrentPage <s:property value="currentPage"/></h1>
  13.    <!--show items of this page--> 
  14.    <s:iterator value="pageContentList" status="status"> 
  15.         <s:property value="id"/> 
  16.         <s:property value="name"/> 
  17.         <BR> 
  18.    </s:iterator>              
  19.    <!--define the url of the previous page and next page--> 
  20.      <s:url id="url_pre" value="ShowAction.action"> 
  21.          <s:param name="currentPage" value="currentPage-1"></s:param> 
  22.      </s:url> 
  23.      <s:url id="url_next" value="ShowAction.action"> 
  24.          <s:param name="currentPage" value="currentPage+1"></s:param> 
  25.      </s:url> 
  26.      <s:url id="url_first" value="ShowAction.action"> 
  27.          <s:param name="currentPage" value="1"></s:param> 
  28.      </s:url>   
  29.      <s:url id="url_last" value="ShowAction.action"> 
  30.          <s:param name="currentPage" value="totalPages"></s:param> 
  31.      </s:url> 
  32.         <!-- use url defined above --> 
  33.    <s:a href ="%{url_first}">First Page</s:a> 
  34.    <s:if test="hasPre">      
  35.    <s:a href="%{url_pre}">Pre</s:a> 
  36.    </s:if> 
  37.    <s:iterator value="indexList" status="status"> 
  38.       <s:url id="url" value="ShowAction.action"> 
  39.       <!-- pass the currentPage parameter --> 
  40.          <s:param name="currentPage" value="indexNumber"></s:param> 
  41.       </s:url> 
  42.       <s:a href="%{url}"><s:property value="indexNumber"/>&nbsp</s:a> 
  43.    </s:iterator> 
  44.    <s:if test="hasNext"> 
  45.    <s:a href="%{url_next}">Next</s:a> 
  46.    </s:if> 
  47.       <s:a href ="%{url_last}">Last Page</s:a> 
  48. </s:form>    
  49. </body> 
  50. </html> 

以上是Struts2 JSP分頁可能還有不盡人意之處,大家多多指點,一起進步。

【編輯推薦】

  1. JSP XML XSLT將輸出轉換HTML
  2. 淺析JSP技術單處理和多任務處理
  3. JSP變量在規范中稱作范圍變量
  4. 詳解JSP技術的方法
  5. JSP變量在規范中稱作范圍變量
責任編輯:佚名 來源: IT168
相關推薦

2012-04-25 10:14:40

JavaStruts

2011-05-03 09:40:58

iBatis

2009-07-29 09:54:34

struts2和str

2009-06-25 15:11:28

Struts2教程Struts2程序

2009-02-04 10:51:07

2009-06-08 16:44:00

2009-06-04 08:34:24

Struts2配置struts.xml

2009-06-03 14:19:34

Struts2Guice

2009-06-25 16:04:30

2013-07-18 15:09:27

2009-07-14 17:10:44

struts2webwork

2009-06-04 09:20:19

struts2 if標使用

2012-05-10 14:00:06

StrutsjsonJava

2013-07-19 09:36:04

struts2struts2漏洞

2011-08-19 13:13:14

struts2Java

2009-06-25 15:26:25

Struts2教程struts.xml常

2009-02-04 11:37:15

2009-06-05 10:05:50

struts menustruts2

2011-04-28 09:52:04

Struts2

2009-06-26 17:15:44

Struts2
點贊
收藏

51CTO技術棧公眾號

日本黑人久久| 亚洲天堂av高清| 欧美中日韩一区二区三区| 91系列在线播放| 欧美另类高清视频在线| 综合伊人久久| 欧美高清视频在线高清观看mv色露露十八| 西游记1978| 精品免费一区二区| 一区二区亚洲精品国产| 大片免费播放在线视频| 亚洲欧美日韩在线不卡| 欧美 亚洲 视频| 尤物精品在线| 国产精品免费一区| 久久国产精品美女| 日韩电影在线观看中文字幕| 一级片在线视频| 国产日韩在线不卡| 免费日韩在线观看| 天堂成人免费av电影一区| 国产一区视频在线| 欧美**vk| 欧美一级片在线播放| 伊人久久大香线蕉综合影院首页| 亚洲国产又黄又爽女人高潮的| 免费在线观看一级毛片| 樱桃国产成人精品视频| 五月天av在线播放| 国产日韩欧美不卡| 免费在线观看毛片网站| 99久久精品国产导航| 国产美女在线一区| 国产成人午夜视频| 日韩人妻精品一区二区三区| 蜜臂av日日欢夜夜爽一区| 人偷久久久久久久偷女厕| 国产精品视频久久一区| 精品不卡一区二区三区| 欧美精品入口| av资源站久久亚洲| 欧美日本不卡高清| 国产尤物99| 久久久人人人| 久久资源亚洲| 亚洲欧美视频一区二区三区| 久久综合中文色婷婷| 久久成人免费| 亚洲欧美久久234| 国产麻豆精品一区二区| 国产精品久久国产| 91丨九色porny丨蝌蚪| 午夜免费一区二区| 一区二区三区中文字幕| 日本中文字幕电影在线观看| 欧美日韩亚洲综合| 黄色污网站在线观看| 国产亚洲精品美女久久久久| 免费日韩成人| 2019中文字幕在线| 日韩理论在线| 精选一区二区三区四区五区| 99精品视频免费观看视频| 欧美日韩国产免费一区二区三区| 麻豆精品视频在线观看| 霍思燕三级露全乳照| 国产精品久久一卡二卡| 在线国产小视频| 欧美一区二区三区日韩视频| 黑人精品一区| 欧美性一区二区三区| 欧美.日韩.国产.一区.二区| 欧美在线播放一区二区| av一本久道久久综合久久鬼色| 婷婷激情四射五月天| 欧美日韩精品在线视频| 欧美78videosex性欧美| 九九精品视频在线观看| 99精品在线免费在线观看| 五月天色一区| 国产精品久久久久久福利一牛影视| 亚洲啪啪aⅴ一区二区三区9色| 欧美一区二区视频免费观看| 美女100%一区| 国产精品日韩电影| 毛片不卡一区二区| 激情视频国产| 日韩一区二区在线观看| yiren22亚洲综合| 国产精品一区av| 韩国av一区二区三区在线观看| 不卡的av中文字幕| 日韩午夜三级在线| 久久精品国产亚洲5555| 日本一区二区三区四区在线观看| 久久久精品国产免大香伊| 91短视频版在线观看www免费| 一本大道久久加勒比香蕉| 欧美日韩中文字幕一区二区三区| 麻豆久久久av免费| 久久久www成人免费毛片麻豆| 国产大片在线免费观看| 久久综合久久八八| 福利h视频在线| 精品久久久久久亚洲| 91麻豆精品国产91久久久资源速度| 粉嫩久久99精品久久久久久夜 | 久久男人av资源站| 精品中文字幕乱| 欧美日本不卡| 日本黄网站免费| 日韩欧美国产高清| 国产综合久久久| 男人天堂av片| 欧美日韩精品系列| 曰本一区二区三区视频| 国产精品视频二| 51精品视频一区二区三区| 国产精品一国产精品| 国产真人做爰毛片视频直播 | 一区二区三区久久| 卡通欧美亚洲| 精品国产综合久久| 亚洲精品视频自拍| 99re久久| 青青草国产精品| 久久爱91午夜羞羞| 亚洲视频一区在线| 久久天天久久| 视频一区免费观看| 日韩欧美在线看| 欧美热在线视频精品999| www.av毛片| 精品日韩一区二区| 欧美日韩一视频区二区| 国产美女视频黄a视频免费| 久久亚洲精品一区二区| 久久精品国产精品青草| 一级毛片视频在线| 成人精品一区二区三区电影黑人| 中文字幕在线不卡视频| 国产一区二区三区亚洲综合 | 91高跟黑色丝袜呻吟在线观看| 久久精品日韩一区二区三区| 国模一区二区| 黄色网zhan| 日韩国产欧美精品在线 | 欧美亚洲激情在线| 久久一区二区视频| 视频一区在线免费看| 国产av不卡一区二区| 欧美一区二区三区在线观看视频| 66视频精品| 日本v片在线免费观看| 国产精品日韩在线观看| 亚洲国产你懂的| av中文一区| www欧美激情| 欧美国产日韩一区二区三区| 久久精品综合网| 激情视频亚洲| 亚洲一区二区蜜桃| 国产69精品久久久久99| 欧美国产乱子伦| 偷拍一区二区| 九色在线网站| 成人在线免费观看一区| 717成人午夜免费福利电影| 久久综合图片| 国产ktv在线视频| 一区二区在线不卡| 亚洲小视频在线| 91丝袜美腿高跟国产极品老师 | 黑人一区二区三区| 99蜜桃臀久久久欧美精品网站| 久久精品一本久久99精品| 久久亚洲私人国产精品va媚药| 在线综合色站| 男人资源网站| 国产情人节一区| 色综合中文字幕国产| 亚洲综合精品四区| 芒果视频成人app| 无码人妻精品一区二区三区66| 国自在线精品视频| 精品福利视频导航| 久久大逼视频| 久久久加勒比| 16—17女人毛片毛片| 成人精品一区二区三区| 91精品蜜臀在线一区尤物| 国产一区在线观看麻豆| av一级久久| 尤物免费看在线视频| 欧美在线视频一区二区三区| 色噜噜国产精品视频一区二区| 亚洲色图欧洲色图| 亚洲欧美日韩一区在线观看| 日韩欧美专区| 欧美色综合一区二区三区|