重构Struts2 JSP分页

本文介绍重构Struts2 JSP分页,以及介绍MyDatabaseServices的具体实现,还有就是把USER替换成你需要显示的数据。
首页 新闻资讯 行业资讯 重构Struts2 JSP分页

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

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

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

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

class Test JSP

 

复制

public classShowActionextendsActionSupport{  privateintcurrentPage = 1;  privateinttotalPages;  privatebooleanhasNext =false;  privatebooleanhasPre = false;  private ArrayList pageContentList;  private ArrayList<PageIndex> indexList  private PageRetrieval pr;  public String execute(){  init();  returnSUCCESS;  }     privatevoid init(){  pr = new PageRetrieval(currentPage);  setPageContentList(pr.getPageContentList());  setndexList(pr.getIndexList());  setHasNext(pr.getHasNext());  setHasPre(pr.getHasPre());  setTotalPages(pr.getTotalPages());  }  //other getters and setters  }  publicclass PageRetrieval {  private PageInformation pi;  public PageRetrieval(int currentPage){  pi = new PageInformationFactory().create(currentPage);   }  publicint getTotalPages(){  returnpi.getPti().getTotalPages();  //other getters and setters  }  publicclass PageInformationFactory {  private DatabaseServices dataServ;  public PageInformationFactory(){  dataServ = MyDatabaseServices.getInstance();  }  public PageInformation create(int currentPage){  PageInformation pi = new PageInformation();  PageTotalInfo pti = getNewPageTotalInfo();          pi.setPti(pti);  if(currentPage < pti.getTotalPages()){     pi.setHasNext(true);  }   if(currentPage !=1){    pi.setHasPre(true);     }   pi.setPageContentList(((MyDatabaseServices)dataServ).getPageContent(currentPage, pti.getPageSize()));  ArrayList<PageIndex> indexTemp = getIndexList(currentPage,pti.getTotalPages());  pi.setIndexList(indexTemp);    return pi;   }  private PageTotalInfo getNewPageTotalInfo(){  int pageSize = 20;  int totalRows = ((MyDatabaseServices)dataServ).getRowCount();  int totalPages = (totalRows + pageSize-1)/pageSize;   returnnew PageTotalInfo(pageSize,totalPages,totalRows);   }  private ArrayList<PageIndex> getIndexList(int currentPage,int totalPages){     int up = 0;     if((currentPage+20)<=totalPages){     up = currentPage+20;    }     else {up = totalPages+1;}  ArayList<PageIndex> result = new ArrayList<PageIndex>();  for(int i=currentPage ;i<up; i++){  PageIndex temp = new PageIndex(i);   result.add(temp);     }      return result;         }  }  publicclass PageInformation {  privateintcurrentPage;  privatebooleanhasNext = false;  privatebooleanhasPre = false;  private ArrayList pageContentList;  private ArrayList<PageIndex> indexList;  private PageTotalInfo pti;  //other getters and setters  }  publicclass MyDatabaseServices implements DatabaseServices{  private DataSource ds;  private InitialContext ic;  private Connection conn;  private PreparedStatement ps;  private ResultSet rs;  privatestatic MyDatabaseServices dgs = new MyDatabaseServices();  private MyDatabaseServices(){//use singleton pattern, so the constructor is private  try{  ic = new InitialContext ();  ds = (DataSource)ic.lookup("java:jdbc/jsp");//get database source    }catch(NamingException e){     e.printStackTrace();    }  }  public Connection getConnection(){    try{      returnds.getConnection();  }catch(SQLException e){  e.printStackTrace();  }  returnnull;  }  public void closeConnection(ResultSet rs,PreparedStatement ps,Connection conn){     try{     if(rs!=null){          rs.close();     }   if(ps!=null){       ps.close();      }        if(conn!=null){      conn.close();   }  }catch(SQLException e ){  e.printStackTrace();  }  }  public ArrayList<User> getPageContent(int currentPage,int pageSize){   ArrayList<User> list=new ArrayList<User>();   conn = getConnection();   try{  ps = conn.prepareStatement("SELECT * FROM jsptest LIMIT ?,?");   int temp = (currentPage-1)*20;    ps.setInt(1, temp);     ps.setInt(2, pageSize);     rs = ps.executeQuery();      while (rs.next()){        User user = new User();        user.setId(rs.getString(1));        user.setName(rs.getString(2));        list.add(user);      }     return list;  }catch(SQLException e){     e.printStackTrace();  }finally{    dgs.closeConnection(rs, ps, conn);  }  returnnull;  }  publicint getRowCount(){    conn = getConnection();  try{  ps = conn.prepareStatement("SELECT * FROM jsptest");  rs = ps.executeQuery();  rs.last();  int result = rs.getRow();  rs.first();  return result;  }catch(SQLException e){      e.printStackTrace();  }finally{      dgs.closeConnection(rs, ps, conn);  }  return 0;  }  publicstaticsynchronized MyDatabaseServices getInstance()//get the sigleton instance  {     if(null==dgs){         dgs= new MyDatabaseServices();         }      returndgs;  }  }
  • 1.

  • 2.

  • 3.

  • 4.

  • 5.

  • 6.

  • 7.

  • 8.

  • 9.

  • 10.

  • 11.

  • 12.

  • 13.

  • 14.

  • 15.

  • 16.

  • 17.

  • 18.

  • 19.

  • 20.

  • 21.

  • 22.

  • 23.

  • 24.

  • 25.

  • 26.

  • 27.

  • 28.

  • 29.

  • 30.

  • 31.

  • 32.

  • 33.

  • 34.

  • 35.

  • 36.

  • 37.

  • 38.

  • 39.

  • 40.

  • 41.

  • 42.

  • 43.

  • 44.

  • 45.

  • 46.

  • 47.

  • 48.

  • 49.

  • 50.

  • 51.

  • 52.

  • 53.

  • 54.

  • 55.

  • 56.

  • 57.

  • 58.

  • 59.

  • 60.

  • 61.

  • 62.

  • 63.

  • 64.

  • 65.

  • 66.

  • 67.

  • 68.

  • 69.

  • 70.

  • 71.

  • 72.

  • 73.

  • 74.

  • 75.

  • 76.

  • 77.

  • 78.

  • 79.

  • 80.

  • 81.

  • 82.

  • 83.

  • 84.

  • 85.

  • 86.

  • 87.

  • 88.

  • 89.

  • 90.

  • 91.

  • 92.

  • 93.

  • 94.

  • 95.

  • 96.

  • 97.

  • 98.

  • 99.

  • 100.

  • 101.

  • 102.

  • 103.

  • 104.

  • 105.

  • 106.

  • 107.

  • 108.

  • 109.

  • 110.

  • 111.

  • 112.

  • 113.

  • 114.

  • 115.

  • 116.

  • 117.

  • 118.

  • 119.

  • 120.

  • 121.

  • 122.

  • 123.

  • 124.

  • 125.

  • 126.

  • 127.

  • 128.

  • 129.

  • 130.

  • 131.

  • 132.

  • 133.

  • 134.

  • 135.

  • 136.

  • 137.

  • 138.

  • 139.

  • 140.

  • 141.

  • 142.

  • 143.

  • 144.

  • 145.

  • 146.

  • 147.

  • 148.

  • 149.

  • 150.

  • 151.

  • 152.

  • 153.

  • 154.

  • 155.

  • 156.

  • 157.

  • 158.

  • 159.

  • 160.

  • 161.

  • 162.

  • 163.

  • 164.

  • 165.

复制


  • 1.

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

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

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

最后以下是JSP页面代码。

复制

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"     pageEncoding="ISO-8859-1"%> <%@ taglib prefix="s" uri="/struts-tags" %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title> </head> <body> <s:form action="ShowAction" method="GET">    <h1>Welcome</h1><BR>    <h1>CurrentPage <s:property value="currentPage"/></h1>   <!--show items of this page-->    <s:iterator value="pageContentList" status="status">         <s:property value="id"/>         <s:property value="name"/>         <BR>    </s:iterator>                 <!--define the url of the previous page and next page-->      <s:url id="url_pre" value="ShowAction.action">          <s:param name="currentPage" value="currentPage-1"></s:param>      </s:url>      <s:url id="url_next" value="ShowAction.action">          <s:param name="currentPage" value="currentPage+1"></s:param>      </s:url>      <s:url id="url_first" value="ShowAction.action">          <s:param name="currentPage" value="1"></s:param>      </s:url>        <s:url id="url_last" value="ShowAction.action">          <s:param name="currentPage" value="totalPages"></s:param>      </s:url>         <!-- use url defined above -->    <s:a href ="%{url_first}">First Page</s:a>    <s:if test="hasPre">         <s:a href="%{url_pre}">Pre</s:a>    </s:if>    <s:iterator value="indexList" status="status">       <s:url id="url" value="ShowAction.action">       <!-- pass the currentPage parameter -->          <s:param name="currentPage" value="indexNumber"></s:param>       </s:url>       <s:a href="%{url}"><s:property value="indexNumber"/>&nbsp</s:a>    </s:iterator>    <s:if test="hasNext">    <s:a href="%{url_next}">Next</s:a>    </s:if>       <s:a href ="%{url_last}">Last Page</s:a> </s:form>    </body> </html>
  • 1.

  • 2.

  • 3.

  • 4.

  • 5.

  • 6.

  • 7.

  • 8.

  • 9.

  • 10.

  • 11.

  • 12.

  • 13.

  • 14.

  • 15.

  • 16.

  • 17.

  • 18.

  • 19.

  • 20.

  • 21.

  • 22.

  • 23.

  • 24.

  • 25.

  • 26.

  • 27.

  • 28.

  • 29.

  • 30.

  • 31.

  • 32.

  • 33.

  • 34.

  • 35.

  • 36.

  • 37.

  • 38.

  • 39.

  • 40.

  • 41.

  • 42.

  • 43.

  • 44.

  • 45.

  • 46.

  • 47.

  • 48.

  • 49.

  • 50.

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

【编辑推荐】

  1. JSP XML XSLT将输出转换HTML

  2. 浅析JSP技术单处理和多任务处理

  3. JSP变量在规范中称作范围变量

  4. 详解JSP技术的方法

  5. JSP变量在规范中称作范围变量

13    2009-07-03 09:35:57    Struts2 JSP