DAO设计模式&&struts分页
来源:互联网 发布:linux时间序列分析软件 编辑:程序博客网 时间:2024/05/22 13:23
今天在网上看了dao设计模式和一个struts分页方法,自己将他们结合起来写了一个程序实例以加深对他们的理解和运用。
程序实例如下:
首先用mysql创建一个person表,sql语句为:
dao工厂类DAOFactory.java如下:
MysqlDAOFactory.java代码如下:
dao接口PersonDAO.java如下:
执行此接口的MysqlPersonDAO.java如下:
与数据库表对应的Person.java类如下:
分页处理类PageInfo.java如下:
getPerson.jsp代码如下:
响应jsp的GetPersonAction.java继承DispatchAction,写了五个方法(showFirst,showPrivious,showNext,showLast,showRandom),分别显示第一页,上一页,下一页,最后一页和任意一页,其实只需要showRandom一个方法就可以了,不过它要从jsp页面得到一个参数,即要显示的是第几页。而前四个方法不需要。具体代码如下:
显示数据信息页面personInfo.jsp如下:
struts-config.xml如下:
程序实例如下:
首先用mysql创建一个person表,sql语句为:
create table person
(
pid int auto_increment,
pname varchar(20),
primary key (pid)
);
insert into person(pname) values('x');
insert into person(pname) values('y');
insert into person(pname) values('z');
insert into person(pname) values('a');
insert into person(pname) values('b');
insert into person(pname) values('c');
insert into person(pname) values('d');
insert into person(pname) values('e');
insert into person(pname) values('f');
insert into person(pname) values('g');
insert into person(pname) values('h');
insert into person(pname) values('k');
insert into person(pname) values('j');
insert into person(pname) values('l');
(
pid int auto_increment,
pname varchar(20),
primary key (pid)
);
insert into person(pname) values('x');
insert into person(pname) values('y');
insert into person(pname) values('z');
insert into person(pname) values('a');
insert into person(pname) values('b');
insert into person(pname) values('c');
insert into person(pname) values('d');
insert into person(pname) values('e');
insert into person(pname) values('f');
insert into person(pname) values('g');
insert into person(pname) values('h');
insert into person(pname) values('k');
insert into person(pname) values('j');
insert into person(pname) values('l');
dao工厂类DAOFactory.java如下:
/Abstract class DAO Factory
public abstract class DAOFactory {
// List of DAO types supported by the factory
public static final int MYSQL=1;
//...
// There will be a method for each DAO that can be
// created. The concrete factories will have to
// implement these methods.
public abstract PersonDAO getPersonDAO();
// ...
public static DAOFactory getDAOFactory(
int whichFactory) {
switch (whichFactory) {
case MYSQL:
return new MysqlDAOFactory();
//...
default:
return null;
}
}
}
public abstract class DAOFactory {
// List of DAO types supported by the factory
public static final int MYSQL=1;
//...
// There will be a method for each DAO that can be
// created. The concrete factories will have to
// implement these methods.
public abstract PersonDAO getPersonDAO();
// ...
public static DAOFactory getDAOFactory(
int whichFactory) {
switch (whichFactory) {
case MYSQL:
return new MysqlDAOFactory();
//...
default:
return null;
}
}
}
MysqlDAOFactory.java代码如下:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class MysqlDAOFactory extends DAOFactory{
private static final String DRIVER=
"com.mysql.jdbc.Driver";
private static final String DBURL=
"jdbc:mysql://localhost/daotest?user=root&password=101213&useUnicode=true&characterEncoding=gb2312";
// method to create Cloudscape connections
public static Connection createConnection() {
// Use DRIVER and DBURL to create a connection
// Recommend connection pool implementation/usage
Connection conn=null;
try{
Class.forName(DRIVER).newInstance();
conn= DriverManager.getConnection(DBURL);
}catch(Exception e){
e.printStackTrace();
}
return conn;
}
public static void closeAll(Connection conn, Statement stmt, ResultSet rs) {
if (rs != null) {
try {
rs.close();
} catch (Exception e) {
System.out.println("close resultset failed." + e.getMessage());
}
}
if (stmt != null) {
try {
stmt.close();
} catch (Exception e) {
System.out.println("close statement failed." + e.getMessage());
}
}
if (conn != null) {
try {
conn.close();
} catch (Exception e) {
System.out.println("close connection failed." + e.getMessage());
}
}
}
public PersonDAO getPersonDAO() {
// CloudscapeCustomerDAO implements CustomerDAO
return new MysqlPersonDAO();
}
}
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class MysqlDAOFactory extends DAOFactory{
private static final String DRIVER=
"com.mysql.jdbc.Driver";
private static final String DBURL=
"jdbc:mysql://localhost/daotest?user=root&password=101213&useUnicode=true&characterEncoding=gb2312";
// method to create Cloudscape connections
public static Connection createConnection() {
// Use DRIVER and DBURL to create a connection
// Recommend connection pool implementation/usage
Connection conn=null;
try{
Class.forName(DRIVER).newInstance();
conn= DriverManager.getConnection(DBURL);
}catch(Exception e){
e.printStackTrace();
}
return conn;
}
public static void closeAll(Connection conn, Statement stmt, ResultSet rs) {
if (rs != null) {
try {
rs.close();
} catch (Exception e) {
System.out.println("close resultset failed." + e.getMessage());
}
}
if (stmt != null) {
try {
stmt.close();
} catch (Exception e) {
System.out.println("close statement failed." + e.getMessage());
}
}
if (conn != null) {
try {
conn.close();
} catch (Exception e) {
System.out.println("close connection failed." + e.getMessage());
}
}
}
public PersonDAO getPersonDAO() {
// CloudscapeCustomerDAO implements CustomerDAO
return new MysqlPersonDAO();
}
}
dao接口PersonDAO.java如下:
import java.util.Collection;
import javax.sql.RowSet;
public interface PersonDAO {
public int insertPerson(String pname);
public boolean deletePerson(int pid);
public Person findPerson(int pid);
public boolean updatePerson(Person p);
//public RowSet selectCustomersRS();
public Collection selectCustomersTO(String sql,int startIndex,int recordPerPage);
//...
}
import javax.sql.RowSet;
public interface PersonDAO {
public int insertPerson(String pname);
public boolean deletePerson(int pid);
public Person findPerson(int pid);
public boolean updatePerson(Person p);
//public RowSet selectCustomersRS();
public Collection selectCustomersTO(String sql,int startIndex,int recordPerPage);
//...
}
执行此接口的MysqlPersonDAO.java如下:
/CloudscapeCustomerDAO implementation of the
//CustomerDAO interface. This class can contain all
//Cloudscape specific code and SQL statements.
//The client is thus shielded from knowing
//these implementation details.
//import java.sql.*;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collection;
//import javax.sql.RowSet;
public class MysqlPersonDAO implements
PersonDAO {
private int totalPerson=0;
public int getTotalPerson() {
return totalPerson;
}
public void setTotalPerson(int totalPerson) {
this.totalPerson = totalPerson;
}
public MysqlPersonDAO() {
// initialization
}
// The following methods can use
// CloudscapeDAOFactory.createConnection()
// to get a connection as required
public int insertPerson(String pname) {
// Implement insert customer here.
// Return newly created customer number
// or a -1 on error
return 0;
}
public boolean deletePerson(int pid) {
// Implement delete customer here
// Return true on success, false on failure
return false;
}
public Person findPerson(int pid) {
// Implement find a customer here using supplied
// argument values as search criteria
// Return a Transfer Object if found,
// return null on error or if not found
return null;
}
public boolean updatePerson(Person p) {
// implement update record here using data
// from the customerData Transfer Object
// Return true on success, false on failure or
// error
return false;
}
//public RowSet selectCustomersRS() {
// implement search customers here using the
// supplied criteria.
// Return a RowSet.
//return null;
//}
public Collection selectCustomersTO(String sql,int startIndex,int recordPerPage) {
// implement search customers here using the
// supplied criteria.
// Alternatively, implement to return a Collection
// of Transfer Objects.
ArrayList pList=new ArrayList();
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
try{
conn=MysqlDAOFactory.createConnection();
stmt=conn.createStatement();
rs=stmt.executeQuery(sql);
rs.last();
totalPerson=rs.getRow();
rs.absolute(startIndex);//将指针移动到此 ResultSet 对象的给定行编号
for(int i=0;i<recordPerPage;i++){
Person p=new Person();
p.setPid(rs.getInt("pid"));
p.setPname(rs.getString("pname"));
pList.add(p);
rs.next();
}
}catch(SQLException e){
e.printStackTrace();
}finally{
MysqlDAOFactory.closeAll(conn, stmt, rs);
}
return pList;
}
//...
}
//CustomerDAO interface. This class can contain all
//Cloudscape specific code and SQL statements.
//The client is thus shielded from knowing
//these implementation details.
//import java.sql.*;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collection;
//import javax.sql.RowSet;
public class MysqlPersonDAO implements
PersonDAO {
private int totalPerson=0;
public int getTotalPerson() {
return totalPerson;
}
public void setTotalPerson(int totalPerson) {
this.totalPerson = totalPerson;
}
public MysqlPersonDAO() {
// initialization
}
// The following methods can use
// CloudscapeDAOFactory.createConnection()
// to get a connection as required
public int insertPerson(String pname) {
// Implement insert customer here.
// Return newly created customer number
// or a -1 on error
return 0;
}
public boolean deletePerson(int pid) {
// Implement delete customer here
// Return true on success, false on failure
return false;
}
public Person findPerson(int pid) {
// Implement find a customer here using supplied
// argument values as search criteria
// Return a Transfer Object if found,
// return null on error or if not found
return null;
}
public boolean updatePerson(Person p) {
// implement update record here using data
// from the customerData Transfer Object
// Return true on success, false on failure or
// error
return false;
}
//public RowSet selectCustomersRS() {
// implement search customers here using the
// supplied criteria.
// Return a RowSet.
//return null;
//}
public Collection selectCustomersTO(String sql,int startIndex,int recordPerPage) {
// implement search customers here using the
// supplied criteria.
// Alternatively, implement to return a Collection
// of Transfer Objects.
ArrayList pList=new ArrayList();
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
try{
conn=MysqlDAOFactory.createConnection();
stmt=conn.createStatement();
rs=stmt.executeQuery(sql);
rs.last();
totalPerson=rs.getRow();
rs.absolute(startIndex);//将指针移动到此 ResultSet 对象的给定行编号
for(int i=0;i<recordPerPage;i++){
Person p=new Person();
p.setPid(rs.getInt("pid"));
p.setPname(rs.getString("pname"));
pList.add(p);
rs.next();
}
}catch(SQLException e){
e.printStackTrace();
}finally{
MysqlDAOFactory.closeAll(conn, stmt, rs);
}
return pList;
}
//...
}
与数据库表对应的Person.java类如下:
public class Person implements java.io.Serializable{
private int pid;
private String pname;
public Person(){
}
public Person(int pid,String pname){
this.pid=pid;
this.pname=pname;
}
public int getPid() {
return pid;
}
public void setPid(int pid) {
this.pid = pid;
}
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
}
private int pid;
private String pname;
public Person(){
}
public Person(int pid,String pname){
this.pid=pid;
this.pname=pname;
}
public int getPid() {
return pid;
}
public void setPid(int pid) {
this.pid = pid;
}
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
}
分页处理类PageInfo.java如下:
/用于记录分页的记录
import java.io.Serializable;
public class PageInfo implements Serializable {
private int recordCountNumber = 0; // 总记录数
private int pageCountNumber = 0; // 总页数
private int recordPerPage = 0; // 每页记录数
private int currentPage = 0; // 当前页数
private int previousPageNumber = 0; // 当前页的前一页数
private int nextPageNumber = 0; // 当前页的后一页数
public PageInfo() {
}
public int getRecordCountNumber() {
return this.recordCountNumber;
}
public int getPageCountNumber() {
if (recordCountNumber == 0)
return 0;
if (recordPerPage == 0)
return 1;
if (this.recordCountNumber % this.recordPerPage == 0) {
this.pageCountNumber = this.recordCountNumber / this.recordPerPage;
} else {
this.pageCountNumber = (this.recordCountNumber / this.recordPerPage) + 1;
}
return this.pageCountNumber;
}
public int getRecordPerPage() {
return this.recordPerPage;
}
public void setRecordPerPage(int recordPerPage){
this.recordPerPage=recordPerPage;
}
public int getCurrentPage() {
return this.currentPage;
}
public int getLastPageNumber() {
return this.pageCountNumber;
}
public int getPreviousPageNumber() {
this.previousPageNumber = this.currentPage - 1;
return this.previousPageNumber;
}
public int getNextPageNumber() {
this.nextPageNumber = this.currentPage + 1;
return this.nextPageNumber;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public void setRecordCountNumber(int recordCountNumber) {
this.recordCountNumber = recordCountNumber;
}
}
import java.io.Serializable;
public class PageInfo implements Serializable {
private int recordCountNumber = 0; // 总记录数
private int pageCountNumber = 0; // 总页数
private int recordPerPage = 0; // 每页记录数
private int currentPage = 0; // 当前页数
private int previousPageNumber = 0; // 当前页的前一页数
private int nextPageNumber = 0; // 当前页的后一页数
public PageInfo() {
}
public int getRecordCountNumber() {
return this.recordCountNumber;
}
public int getPageCountNumber() {
if (recordCountNumber == 0)
return 0;
if (recordPerPage == 0)
return 1;
if (this.recordCountNumber % this.recordPerPage == 0) {
this.pageCountNumber = this.recordCountNumber / this.recordPerPage;
} else {
this.pageCountNumber = (this.recordCountNumber / this.recordPerPage) + 1;
}
return this.pageCountNumber;
}
public int getRecordPerPage() {
return this.recordPerPage;
}
public void setRecordPerPage(int recordPerPage){
this.recordPerPage=recordPerPage;
}
public int getCurrentPage() {
return this.currentPage;
}
public int getLastPageNumber() {
return this.pageCountNumber;
}
public int getPreviousPageNumber() {
this.previousPageNumber = this.currentPage - 1;
return this.previousPageNumber;
}
public int getNextPageNumber() {
this.nextPageNumber = this.currentPage + 1;
return this.nextPageNumber;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public void setRecordCountNumber(int recordCountNumber) {
this.recordCountNumber = recordCountNumber;
}
}
getPerson.jsp代码如下:
<%@ page language="java" pageEncoding="GB18030"%>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html:html>
<head>
<title>getPerson.jsp</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
</head>
<body>
<form action="getPerson.do?method=showFirst" method="post">
<html:submit>得到人员信息</html:submit>
</form>
</body>
</html:html>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html:html>
<head>
<title>getPerson.jsp</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
</head>
<body>
<form action="getPerson.do?method=showFirst" method="post">
<html:submit>得到人员信息</html:submit>
</form>
</body>
</html:html>
响应jsp的GetPersonAction.java继承DispatchAction,写了五个方法(showFirst,showPrivious,showNext,showLast,showRandom),分别显示第一页,上一页,下一页,最后一页和任意一页,其实只需要showRandom一个方法就可以了,不过它要从jsp页面得到一个参数,即要显示的是第几页。而前四个方法不需要。具体代码如下:
import java.util.Collection;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import dao.DAOFactory;
import dao.MysqlPersonDAO;
import dao.PageInfo;
import dao.PersonDAO;
/**
* MyEclipse Struts
* Creation date: 07-28-2007
*
* XDoclet definition:
* @struts.action input="/getPerson.jsp" validate="true"
*/
public class GetPersonAction extends DispatchAction {
/*
* Generated Methods
*/
public ActionForward showFirst(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
DAOFactory mysqlFactory =
DAOFactory.getDAOFactory(DAOFactory.MYSQL);
PersonDAO pDAO =
mysqlFactory.getPersonDAO();
String sql="select * from person";
HttpSession session=request.getSession();
PageInfo pInfo=(PageInfo)session.getAttribute("pageinfo");
if(pInfo==null){
pInfo=new PageInfo();
pInfo.setRecordPerPage(10);
}
Collection pList=pDAO.selectCustomersTO(sql, 1, pInfo.getRecordPerPage());
pInfo.setRecordCountNumber(((MysqlPersonDAO)pDAO).getTotalPerson());
pInfo.setCurrentPage(1);
session.setAttribute("pageinfo", pInfo);
request.setAttribute("plist", pList);
return mapping.findForward("personInfo");
}
public ActionForward showPrivious(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
DAOFactory mysqlFactory =
DAOFactory.getDAOFactory(DAOFactory.MYSQL);
PersonDAO pDAO =
mysqlFactory.getPersonDAO();
String sql="select * from person";
HttpSession session=request.getSession();
PageInfo pInfo=(PageInfo)session.getAttribute("pageinfo");
Collection pList=pDAO.selectCustomersTO(sql, (pInfo.getPreviousPageNumber()-1) *
pInfo.getRecordPerPage()+1, pInfo.getRecordPerPage());
pInfo.setRecordCountNumber(((MysqlPersonDAO)pDAO).getTotalPerson());
pInfo.setCurrentPage(pInfo.getPreviousPageNumber());
session.setAttribute("pageinfo", pInfo);
request.setAttribute("plist", pList);
return mapping.findForward("personInfo");
}
public ActionForward showNext(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
DAOFactory mysqlFactory =
DAOFactory.getDAOFactory(DAOFactory.MYSQL);
PersonDAO pDAO =
mysqlFactory.getPersonDAO();
String sql="select * from person";
HttpSession session=request.getSession();
PageInfo pInfo=(PageInfo)session.getAttribute("pageinfo");
Collection pList=pDAO.selectCustomersTO(sql, pInfo.getCurrentPage()*pInfo.getRecordPerPage(), pInfo.getRecordPerPage());
pInfo.setRecordCountNumber(((MysqlPersonDAO)pDAO).getTotalPerson());
pInfo.setCurrentPage(pInfo.getNextPageNumber());
session.setAttribute("pageinfo", pInfo);
request.setAttribute("plist", pList);
return mapping.findForward("personInfo");
}
public ActionForward showLast(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
DAOFactory mysqlFactory =
DAOFactory.getDAOFactory(DAOFactory.MYSQL);
PersonDAO pDAO =
mysqlFactory.getPersonDAO();
String sql="select * from person";
HttpSession session=request.getSession();
PageInfo pInfo=(PageInfo)session.getAttribute("pageinfo");
Collection pList=pDAO.selectCustomersTO(sql, (pInfo.getPageCountNumber()-1) *
pInfo.getRecordPerPage()+1, pInfo.getRecordPerPage());
pInfo.setRecordCountNumber(((MysqlPersonDAO)pDAO).getTotalPerson());
pInfo.setCurrentPage(pInfo.getLastPageNumber());
session.setAttribute("pageinfo", pInfo);
request.setAttribute("plist", pList);
return mapping.findForward("personInfo");
}
public ActionForward showRandom(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
DAOFactory mysqlFactory =
DAOFactory.getDAOFactory(DAOFactory.MYSQL);
PersonDAO pDAO =
mysqlFactory.getPersonDAO();
String pageNumber=request.getParameter("pageNumber");
int page=Integer.parseInt(pageNumber);
String sql="select * from person";
HttpSession session=request.getSession();
PageInfo pInfo=(PageInfo)session.getAttribute("pageinfo");
Collection pList=pDAO.selectCustomersTO(sql, (page-1) *
pInfo.getRecordPerPage()+1, pInfo.getRecordPerPage());
pInfo.setRecordCountNumber(((MysqlPersonDAO)pDAO).getTotalPerson());
pInfo.setCurrentPage(page);
session.setAttribute("pageinfo", pInfo);
request.setAttribute("plist", pList);
return mapping.findForward("personInfo");
}
}
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import dao.DAOFactory;
import dao.MysqlPersonDAO;
import dao.PageInfo;
import dao.PersonDAO;
/**
* MyEclipse Struts
* Creation date: 07-28-2007
*
* XDoclet definition:
* @struts.action input="/getPerson.jsp" validate="true"
*/
public class GetPersonAction extends DispatchAction {
/*
* Generated Methods
*/
public ActionForward showFirst(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
DAOFactory mysqlFactory =
DAOFactory.getDAOFactory(DAOFactory.MYSQL);
PersonDAO pDAO =
mysqlFactory.getPersonDAO();
String sql="select * from person";
HttpSession session=request.getSession();
PageInfo pInfo=(PageInfo)session.getAttribute("pageinfo");
if(pInfo==null){
pInfo=new PageInfo();
pInfo.setRecordPerPage(10);
}
Collection pList=pDAO.selectCustomersTO(sql, 1, pInfo.getRecordPerPage());
pInfo.setRecordCountNumber(((MysqlPersonDAO)pDAO).getTotalPerson());
pInfo.setCurrentPage(1);
session.setAttribute("pageinfo", pInfo);
request.setAttribute("plist", pList);
return mapping.findForward("personInfo");
}
public ActionForward showPrivious(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
DAOFactory mysqlFactory =
DAOFactory.getDAOFactory(DAOFactory.MYSQL);
PersonDAO pDAO =
mysqlFactory.getPersonDAO();
String sql="select * from person";
HttpSession session=request.getSession();
PageInfo pInfo=(PageInfo)session.getAttribute("pageinfo");
Collection pList=pDAO.selectCustomersTO(sql, (pInfo.getPreviousPageNumber()-1) *
pInfo.getRecordPerPage()+1, pInfo.getRecordPerPage());
pInfo.setRecordCountNumber(((MysqlPersonDAO)pDAO).getTotalPerson());
pInfo.setCurrentPage(pInfo.getPreviousPageNumber());
session.setAttribute("pageinfo", pInfo);
request.setAttribute("plist", pList);
return mapping.findForward("personInfo");
}
public ActionForward showNext(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
DAOFactory mysqlFactory =
DAOFactory.getDAOFactory(DAOFactory.MYSQL);
PersonDAO pDAO =
mysqlFactory.getPersonDAO();
String sql="select * from person";
HttpSession session=request.getSession();
PageInfo pInfo=(PageInfo)session.getAttribute("pageinfo");
Collection pList=pDAO.selectCustomersTO(sql, pInfo.getCurrentPage()*pInfo.getRecordPerPage(), pInfo.getRecordPerPage());
pInfo.setRecordCountNumber(((MysqlPersonDAO)pDAO).getTotalPerson());
pInfo.setCurrentPage(pInfo.getNextPageNumber());
session.setAttribute("pageinfo", pInfo);
request.setAttribute("plist", pList);
return mapping.findForward("personInfo");
}
public ActionForward showLast(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
DAOFactory mysqlFactory =
DAOFactory.getDAOFactory(DAOFactory.MYSQL);
PersonDAO pDAO =
mysqlFactory.getPersonDAO();
String sql="select * from person";
HttpSession session=request.getSession();
PageInfo pInfo=(PageInfo)session.getAttribute("pageinfo");
Collection pList=pDAO.selectCustomersTO(sql, (pInfo.getPageCountNumber()-1) *
pInfo.getRecordPerPage()+1, pInfo.getRecordPerPage());
pInfo.setRecordCountNumber(((MysqlPersonDAO)pDAO).getTotalPerson());
pInfo.setCurrentPage(pInfo.getLastPageNumber());
session.setAttribute("pageinfo", pInfo);
request.setAttribute("plist", pList);
return mapping.findForward("personInfo");
}
public ActionForward showRandom(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
DAOFactory mysqlFactory =
DAOFactory.getDAOFactory(DAOFactory.MYSQL);
PersonDAO pDAO =
mysqlFactory.getPersonDAO();
String pageNumber=request.getParameter("pageNumber");
int page=Integer.parseInt(pageNumber);
String sql="select * from person";
HttpSession session=request.getSession();
PageInfo pInfo=(PageInfo)session.getAttribute("pageinfo");
Collection pList=pDAO.selectCustomersTO(sql, (page-1) *
pInfo.getRecordPerPage()+1, pInfo.getRecordPerPage());
pInfo.setRecordCountNumber(((MysqlPersonDAO)pDAO).getTotalPerson());
pInfo.setCurrentPage(page);
session.setAttribute("pageinfo", pInfo);
request.setAttribute("plist", pList);
return mapping.findForward("personInfo");
}
}
显示数据信息页面personInfo.jsp如下:
<%@ page language="java" pageEncoding="GB18030"%>
<%@ page import="dao.PageInfo" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>
<%
PageInfo pinfo=(PageInfo)session.getAttribute("pageinfo");
int pageCount=pinfo.getPageCountNumber();
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html:html>
<head>
<title>personInfo.jsp</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<script type="text/javascript">
function pageSelected(){
document.form1.pageNumber.selectedIndex=<%=pinfo.getCurrentPage()-1 %>;
}
function formSubmit(){
document.form1.submit();
}
</script>
</head>
<body onLoad="pageSelected()">
<center>
<table>
<caption>人员信息</caption>
<tr>
<td>编号</td>
<td>姓名</td>
</tr>
<logic:present name="plist">
<logic:iterate id="person" name="plist">
<tr>
<td>
<bean:write name="person" property="pid"/>
</td>
<td>
<bean:write name="person" property="pname"/>
</td>
</tr>
</logic:iterate>
</logic:present>
</table>
<table>
<tr>
<td>
共<bean:write name="pageinfo" property="recordCountNumber" scope="session"/>条记录
</td>
<td>
共<bean:write name="pageinfo" property="pageCountNumber" scope="session"/>页
</td>
<td>
当前第<bean:write name="pageinfo" property="currentPage" scope="session"/>页
</td>
<td>
<html:link href="/DAOTest/getPerson.do?method=showFirst"> 首页 </html:link>
</td>
<td>
<logic:equal name="pageinfo" property="currentPage" value="1">
上一页
</logic:equal>
<logic:notEqual name="pageinfo" property="currentPage" value="1">
<html:link href="/DAOTest/getPerson.do?method=showPrivious">
上一页
</html:link>
</logic:notEqual>
</td>
<td>
<logic:equal name="pageinfo" property="currentPage" value="<%=String.valueOf(pageCount) %>">
下一页
</logic:equal>
<logic:notEqual name="pageinfo" property="currentPage" value="<%=String.valueOf(pageCount) %>">
<html:link href="/DAOTest/getPerson.do?method=showNext">
下一页
</html:link>
</logic:notEqual>
</td>
<td>
<html:link href="/DAOTest/getPerson.do?method=showLast"> 尾页</html:link>
</td>
<td>
<form action="/DAOTest/getPerson.do?method=showRandom" method="post" name="form1">
<select name="pageNumber" onChange="formSubmit()">
<%
for(int i=1;i<=pageCount;i++){
%>
<option value="<%=i %>">
--第<%=i %>页--
</option>
<%} %>
</select>
</form>
<td>
</table>
</center>
</body>
</html:html>
<%@ page import="dao.PageInfo" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>
<%
PageInfo pinfo=(PageInfo)session.getAttribute("pageinfo");
int pageCount=pinfo.getPageCountNumber();
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html:html>
<head>
<title>personInfo.jsp</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<script type="text/javascript">
function pageSelected(){
document.form1.pageNumber.selectedIndex=<%=pinfo.getCurrentPage()-1 %>;
}
function formSubmit(){
document.form1.submit();
}
</script>
</head>
<body onLoad="pageSelected()">
<center>
<table>
<caption>人员信息</caption>
<tr>
<td>编号</td>
<td>姓名</td>
</tr>
<logic:present name="plist">
<logic:iterate id="person" name="plist">
<tr>
<td>
<bean:write name="person" property="pid"/>
</td>
<td>
<bean:write name="person" property="pname"/>
</td>
</tr>
</logic:iterate>
</logic:present>
</table>
<table>
<tr>
<td>
共<bean:write name="pageinfo" property="recordCountNumber" scope="session"/>条记录
</td>
<td>
共<bean:write name="pageinfo" property="pageCountNumber" scope="session"/>页
</td>
<td>
当前第<bean:write name="pageinfo" property="currentPage" scope="session"/>页
</td>
<td>
<html:link href="/DAOTest/getPerson.do?method=showFirst"> 首页 </html:link>
</td>
<td>
<logic:equal name="pageinfo" property="currentPage" value="1">
上一页
</logic:equal>
<logic:notEqual name="pageinfo" property="currentPage" value="1">
<html:link href="/DAOTest/getPerson.do?method=showPrivious">
上一页
</html:link>
</logic:notEqual>
</td>
<td>
<logic:equal name="pageinfo" property="currentPage" value="<%=String.valueOf(pageCount) %>">
下一页
</logic:equal>
<logic:notEqual name="pageinfo" property="currentPage" value="<%=String.valueOf(pageCount) %>">
<html:link href="/DAOTest/getPerson.do?method=showNext">
下一页
</html:link>
</logic:notEqual>
</td>
<td>
<html:link href="/DAOTest/getPerson.do?method=showLast"> 尾页</html:link>
</td>
<td>
<form action="/DAOTest/getPerson.do?method=showRandom" method="post" name="form1">
<select name="pageNumber" onChange="formSubmit()">
<%
for(int i=1;i<=pageCount;i++){
%>
<option value="<%=i %>">
--第<%=i %>页--
</option>
<%} %>
</select>
</form>
<td>
</table>
</center>
</body>
</html:html>
struts-config.xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<struts-config>
<data-sources />
<form-beans />
<global-exceptions />
<global-forwards />
<action-mappings >
<action
input="/getPerson.jsp"
path="/getPerson"
parameter="method"
type="com.iss.struts.action.GetPersonAction">
<forward name="personInfo" path="/personInfo.jsp" />
</action>
</action-mappings>
<message-resources parameter="com.iss.struts.ApplicationResources" />
</struts-config>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<struts-config>
<data-sources />
<form-beans />
<global-exceptions />
<global-forwards />
<action-mappings >
<action
input="/getPerson.jsp"
path="/getPerson"
parameter="method"
type="com.iss.struts.action.GetPersonAction">
<forward name="personInfo" path="/personInfo.jsp" />
</action>
</action-mappings>
<message-resources parameter="com.iss.struts.ApplicationResources" />
</struts-config>
- DAO设计模式&&struts分页
- DAO设计模式&&struts分页
- struts+dao+hibernate模式
- Struts+Hibernate模板开发笔记---设计模式:DAO
- 实现DAO 设计模式
- DAO设计模式
- 实现DAO 设计模式
- 什么DAO设计模式
- 设计模式--DAO
- DAO设计模式
- DAO设计模式
- 实现DAO 设计模式
- DAO设计模式(转)
- DAO 设计模式 总结
- DAO设计模式笔记
- DAO设计模式总结
- dao设计模式
- DAO设计模式
- 从追MM谈Java的23种设计模式
- NOKIA tune ringtones: user defined
- IncompatibleClassChangeError
- 在CSDN开通技术博客 Web blogging in CSDN
- 10位专家预测2007年巨大潜力技术
- DAO设计模式&&struts分页
- Java IO完全总结(转载)
- 2005~2006年度电子元件行业分析报告
- 绝对路径分割成目录路径和文件名方法2(VB)
- 2007通信产业十大技术发展趋势白皮书
- Array::new
- Windows 网络编程(7)
- 4G的技术演进道路及趋势报告
- 如何帮定HyperLink的NavigateUrl属性??