重构Struts2 JSP分页

开发 后端
本文介绍重构Struts2 JSP分页,以及介绍MyDatabaseServices的具体实现,还有就是把USER替换成你需要显示的数据。

前两天的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){  
       dgsnew 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变量在规范中称作范围变量
责任编辑:佚名 来源: IT168
相关推荐

2011-05-03 09:40:58

iBatis

2012-04-25 10:14:40

JavaStruts

2009-07-29 09:54:34

struts2和str

2009-06-25 15:11:28

Struts2教程Struts2程序

2009-06-08 16:44:00

2009-02-04 10:51:07

2009-06-04 08:34:24

Struts2配置struts.xml

2009-06-25 15:26:25

Struts2教程struts.xml常

2011-08-19 13:13:14

struts2Java

2012-05-10 14:00:06

StrutsjsonJava

2013-07-19 09:36:04

struts2struts2漏洞

2009-06-03 14:19:34

Struts2Guice

2009-06-04 09:20:19

struts2 if标使用

2009-07-14 17:10:44

struts2webwork

2009-06-25 16:04:30

2013-07-18 15:09:27

2009-02-04 11:37:15

2009-06-05 10:05:50

struts menustruts2

2009-06-04 11:08:32

struts2 val框架

2011-04-28 09:52:04

Struts2
点赞
收藏

51CTO技术栈公众号