分页显示是WEB开发中都要用到的一种数据显示方法,这里介绍一种差不多全靠配置来完成分页显示功能的方式,运用这种方式来完成数据分页显示,你会发现原来分页也可以做到如此简单,不用再写繁琐的JSP代码,你只需更改几个特定参数就可以随心所欲地进行分页。本例大量采用JSTL标签,代码简单整齐排列美观,读者不妨一试!
 
WEB服务器:Tomcat
数据库:Microsoft SQL Server 2000
 
值得说明的一点是,在代码较多的地方,有可能我不会将代码全部列出来,而只是挑选关键地方加以说明,而后我会将完整代码上传到附件中,读者朋友有不懂的地方可以参照附件。
 
为节省篇幅,数据类DBConnect我就不列出代码,其功能就是根据传入的连接池名来完成数据库连接及数据库查询和更新操作,有需要读者朋友可以参考附件,下面提一下所用到的连接池为proxool,而后只要将连接池别名(本例中为bpDbCon)传入连接类DBConnect即可实现连接和其它数据操作。
xml version ="1.0" encoding ="UTF-8" ?>

< something-else-entirely >
   < proxool >
     < alias >bpDbCon alias >
     < driver-url >jdbc:microsoft:sqlserver://192.168.39.62:1433;DatabaseName=bpdb driver-url >
     < driver-class >com.microsoft.jdbc.sqlserver.SQLServerDriver driver-class >
     < driver-properties >
       < property name ="user" value ="test" />
       < property name ="password" value ="test" />
       < property name ="useUnicode" value ="true" />    
     driver-properties >  
     < minimum-connection-count >6 minimum-connection-count >
     < maximum-connection-count >20 maximum-connection-count >
     < prototype-count >6 prototype-count >
     < house-keeping-test-sql >select CURRENT_DATE house-keeping-test-sql >
   proxool >  
something-else-entirely >

 
1,数据表结构,这个是我用到的数据表。
CREATE TABLE [dbo].[recordsList] (
    [nId] [ int] IDENTITY (1, 1) NOT NULL ,
    [strPoNo] [ nvarchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [strGrNo] [ nvarchar] (30) COLLATE Chinese_PRC_CI_AS NULL ,
    [nItem] [ int] NOT NULL ,
    [strMaterialDesc] [ nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
    [strMaterialNo] [ nvarchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [strMaterialName] [ nvarchar] (100) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [strApplicant] [ nvarchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
    [fltUnitPrice] [ float] NULL ,
    [nCount] [ int] NOT NULL ,
    [strDate] [ nvarchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [strDeptName] [ nvarchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [strSignDate] [ nvarchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
    [strMaterialSort] [ nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL  
) ON [ PRIMARY]
 
2,要用到的分页存储过程P_viewPage,这个存储过程在整个分页显示中起了关键作用,靠传入的参数来获得所需要的记录集
CREATE PROC P_viewPage
/*
no_mIss 分页存储过程 2007.2.20 QQ:706716259
适用于单一主键或存在唯一值列的表或视图  
*/

@TableName VARCHAR(200), --表名
@FieldList VARCHAR(2000), --显示列名
@PrimaryKey VARCHAR(100), --单一主键或唯一值键
@ Where VARCHAR(1000), --查询条件 不含'where'字符
@ Order VARCHAR(1000), --排序 不含'order by'字符,如id asc,userid desc,当@SortType=3时生效
@SortType INT, --排序规则 1:正序asc 2:倒序desc 3:多列排序
@RecorderCount INT, --记录总数 0:会返回总记录
@PageSize INT, --每页输出的记录数
@PageIndex INT, --当前页数
@TotalCount INTEGER OUTPUT, --返回记录总数
@TotalPageCount INTEGER OUTPUT --返回总页数

AS
SET NOCOUNT ON
IF ISNULL(@TableName, '') = '' OR ISNULL(@FieldList, '') = ''  
OR ISNULL(@PrimaryKey, '') = ''
OR @SortType < 1 OR @SortType >3
OR @RecorderCount < 0 OR @PageSize < 0 OR @PageIndex < 0
BEGIN  
     RETURN
END

DECLARE @new_where1 VARCHAR(1000)
DECLARE @new_where2 VARCHAR(1000)
DECLARE @new_order VARCHAR(1000)  
DECLARE @Sql VARCHAR(8000)
DECLARE @SqlCount NVARCHAR(4000)

IF ISNULL(@ where, '') = ''
     BEGIN
   SET @new_where1 = ' '
   SET @new_where2 = ' WHERE '
     END
ELSE
     BEGIN
   SET @new_where1 = ' WHERE ' + @ where  
   SET @new_where2 = ' WHERE ' + @ where + ' AND '
     END
IF ISNULL(@ order, '') = '' OR @SortType = 1 OR @SortType = 2  
     BEGIN
   IF @SortType = 1 SET @new_order = ' ORDER BY ' + @PrimaryKey + ' ASC'
   IF @SortType = 2 SET @new_order = ' ORDER BY ' + @PrimaryKey + ' DESC'
     END
ELSE
     BEGIN
   SET @new_order = ' ORDER BY ' + @ Order
     END
SET @SqlCount = 'SELECT @TotalCount=COUNT(*),@TotalPageCount=CEILING((COUNT(*)+0.0)/'
+ CAST(@PageSize AS VARCHAR)+ ') FROM ' + @TableName + @new_where1
IF @RecorderCount = 0
     BEGIN
   EXEC SP_EXECUTESQL @SqlCount,N '@TotalCount INT OUTPUT,@TotalPageCount INT OUTPUT',
  @TotalCount OUTPUT,@TotalPageCount OUTPUT
     END
ELSE
     BEGIN
   SELECT @TotalCount = @RecorderCount  
     END
IF @PageIndex > CEILING((@TotalCount+0.0)/@PageSize)
     BEGIN
   SET @PageIndex = CEILING((@TotalCount+0.0)/@PageSize)
   --这里加一行测试
   --print '当前页PageIndex为'+str(@PageIndex)
     END
IF @PageIndex = 0 or @PageIndex = 1  
--IF @PageIndex = 1    --原始行
     BEGIN
   SET @Sql = 'SELECT TOP ' + STR(@PageSize) + ' ' + @FieldList + ' FROM '  
  + @TableName + @new_where1 + @new_order
     END
ELSE
     BEGIN
   IF @SortType = 1
       BEGIN
     SET @Sql = 'SELECT TOP ' + STR(@PageSize) + ' ' + @FieldList + ' FROM '  
    + @TableName + @new_where2 + @PrimaryKey + ' > '
    + '(SELECT max(' + @PrimaryKey + ') FROM (SELECT TOP '
    + STR(@PageSize*(@PageIndex-1)) + ' ' + @PrimaryKey  
    + ' FROM ' + @TableName
    + @new_where1 + @new_order + ' ) AS TMP) '+ @new_order
       END
   IF @SortType = 2
       BEGIN
     SET @Sql = 'SELECT TOP ' + STR(@PageSize) + ' ' + @FieldList + ' FROM '  
    + @TableName + @new_where2 + @PrimaryKey + ' < '
    + '(SELECT MIN(' + @PrimaryKey + ') FROM (SELECT TOP '
    + STR(@PageSize*(@PageIndex-1)) + ' ' + @PrimaryKey  
    + ' FROM '+ @TableName
    + @new_where1 + @new_order + ') AS TMP) '+ @new_order  
       END  
   IF @SortType = 3
       BEGIN
       IF CHARINDEX( ',',@ Order) = 0 BEGIN RETURN END
       SET @Sql = 'SELECT TOP ' + STR(@PageSize) + ' ' + @FieldList + ' FROM '
      + @TableName + @new_where2 + @PrimaryKey + ' NOT IN (SELECT TOP '
      + STR(@PageSize*(@PageIndex-1)) + ' ' + @PrimaryKey
      + ' FROM ' + @TableName + @new_where1 + @new_order + ')'
      + @new_order
       END
     END
EXEC(@Sql)
--print @Sql
 
3,分页显示类,两个,父类Pagess,子类Listss,这两个类接收Jsp页面传来的参数,并将参数整理后传给所调用的分页存储过程,同时将存储过程返回的记录集结果封装起来
父类Pages
package sqlDBconnect;

import java.util.Vector;

/**
* Title:        分页类
* Description:
* Copyright:    Copyright (c) 2007
* Company:      USI
* @author:   LJ
* @version 1.0
*/


public class Pagess {
     protected Vector list;   //物品向量数组
     protected int page=1;   //当前页数
     protected int recordCount=0;   //记录总数 0:会返回总记录
     protected int pageCount=1;       //返回总页数
     protected int pageSize=15;   //每页输出的记录数
     protected int recode=0;  
     protected int pageMaxCount=0;
     protected int listCount=0;
     protected boolean showAll= false;
  
     public Pagess() throws Exception{

    }
  
     public void setPage( int newPage) {
         this.page=newPage;
    }

     public int getPage() {
     if (page<=0)
     return 1;
     else
     return page;  
  
    }
  
     public void setPageSize( int newPageSize) {
    pageSize=newPageSize;
    }
  
     public void setShowAll() {
    showAll= true;
    }

     public int getPageSize() {
     return pageSize;
    }
    
     public int getPageCount() {
   return pageCount;
    }
     public int getRecordCount() {
   return recordCount;
    }
     public int getRecode() {
   return recode;
    }
  
     public void setListCount( int listCount){
   this.listCount=listCount;
    }
  
     public int getListCount() {
   return list.size();
    }
  
    
     public Vector getLists() {
   return list;
    }
  

     public void setShowPage( int newCount) throws Exception {
      listCount=newCount;
      list = new Vector(); //PageMaxCount+1);
      list.clear();        
      recode=(page-1)*pageSize+1;
  
    }

     /**
  * @param pageCount 要设置的 pageCount
  */

     public void setPageCount( int pageCount) {
   this.pageCount = pageCount;
    }

     /**
  * @param recordCount 要设置的 recordCount
  */

     public void setRecordCount( int recordCount) {
   this.recordCount = recordCount;
    }
};

 
子类Listss,注意其中的excute方法,该方法就是用来根据传入的参数返回所需记录集,并将结果记录集封装以便在jsp页面更容易地调用。
package sqlDBconnect;

import java.sql.CallableStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Types;
/**
* Title:        物品列表
* Description:
* Copyright:    Copyright (c) 2007
* Company:      USI
* @author:   LJ
* @version 1.0
*/


public class Listss extends Pagess {
     private String[]           columnNames = {};
     private ResultSetMetaData  metaData;
     int                        row=0;
     int                       columnCount=0;  
    String                    strSql="";  
     int        execute=0;
    String        sql="";
     private String     poolName;
  
     private String      tableName="";
     private String      fieldList="";
     private String      primaryKey="";
     private String      where="";
     private String      order="";
     private int      sortType=1;
     /**
  * @return fieldList
  */

     public String getFieldList() {
   return fieldList;
    }

     /**
  * @param fieldList 要设置的 fieldList
  */

     public void setFieldList(String fieldList) {
   this.fieldList = fieldList;
    }

     /**
  * @return order
  */

     public String getOrder() {
   return order;
    }

     /**
  * @param order 要设置的 order
  */

     public void setOrder(String order) {
   this.order = order;
    }

     /**
  * @return primaryKey
  */

     public String getPrimaryKey() {
   return primaryKey;
    }

     /**
  * @param primaryKey 要设置的 primaryKey
  */

     public void setPrimaryKey(String primaryKey) {
   this.primaryKey = primaryKey;
    }

     /**
  * @return sortType
  */

     public int getSortType() {
   return sortType;
    }

     /**
  * @param sortType 要设置的 sortType
  */

     public void setSortType( int sortType) {
   this.sortType = sortType;
   //System.out.println(this.sortType);
    }

     /**
  * @return tableName
  */

     public String getTableName() {
   return tableName;
    }

     /**
  * @param tableName 要设置的 tableName
  */

     public void setTableName(String tableName) {
   this.tableName = tableName;
    }

     /**
  * @return where
  */

     public String getWhere() {
   return where;
    }

     /**
  * @param where 要设置的 where
  */

     public void setWhere(String where) {
   this.where = where;
    }

     public Listss() throws Exception{
   super();
    }
  
     public String getColumnName( int column) {
         if (column>=columnCount)  
       column=columnCount-1;
        
         if (column<0)  
       column=0;  
              
         if (columnNames[column] != null) {
             return columnNames[column];
        } else  
             return "";
        
    }
    
     public int getColumnIndex(String name) {
       int ok=0;  
       if (name!= null) {
           for ( int i=0;i          String temp=columnNames[i].toLowerCase();
          name=name.toLowerCase();  
         if (name.equals(temp))
          {    
          ok= i;
           break;
        }

       }
   }
     return ok;  
   }
    
     public void setRow( int i) {
        row=i;
    }
    
     public int getRow(){
         return this.row;
    }
    
     public int getColumnCount() {
         return columnNames.length;
    }
    
     public Class getColumnClass( int column) {
         int type;
         try {
            type = metaData.getColumnType(column+1);
        }
         catch (SQLException e) {
             return null;
        }

         switch(type) {
         case Types.CHAR:
         case Types.VARCHAR:
         case Types.LONGVARCHAR:
             return String. class;

         case Types.BIT:
             return Boolean. class;

         case Types.TINYINT:
         case Types.SMALLINT:
         case Types.INTEGER:
             return Integer. class;

         case Types.BIGINT:
             return Long. class;

         case Types.FLOAT:
         case Types.DOUBLE:
             return Double. class;

         case Types.DATE:
             return java.sql.Date. class;

         default:
             return Object. class;
        }
    }
        
     public String getString( int aColumn) {
        String[] rowStr = (String[])list.elementAt(row);
         return rowStr[aColumn];
     //    Vector row = (Vector)list.elementAt(FRow);
     //    return row.elementAt(aColumn).toString();
        }
      
     public String getString(String aColumnName) {
        String[] rowStr = (String[])list.elementAt(row);
         return rowStr[getColumnIndex(aColumnName)];      
     //    Vector row = (Vector)list.elementAt(FRow);
     //    return row.elementAt(getColumnIndex(aColumnName)).toString();
        }
    
     public void setSql(String tableName) {
  String Str="";
  Str= "select  * from "+tableName+ " order by id desc";
  strSql=Str;
    }

     public void setStrSql(String Str) {
  strSql=Str;
    }
  
     public String getStrSql(){
   return this.strSql;
    }
  
     public String getSql() {
   return strSql;
    }

     public int getExecute() throws Exception{
   if(excute()) return 1;
   else return 0;
    }

     public boolean excute() throws Exception {
   int id = 0;
   try {
      DBConnect dbc  = new DBConnect( this.poolName, "CallableStatement");
      CallableStatement   cstmt   =   dbc.getConnection().prepareCall( "{call P_viewPage(?,?,?,?,?,?,?,?,?,?,?)}",ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
      cstmt.setString(1, this.tableName);
      cstmt.setString(2, this.fieldList);
      cstmt.setString(3, this.primaryKey);
      cstmt.setString(4, this.where);
      cstmt.setString(5, this.order);
      cstmt.setInt(6, this.sortType);
      cstmt.setInt(7, super.getRecordCount());
      cstmt.setInt(8, super.getPageSize());
      cstmt.setInt(9, super.getPage());
      cstmt.registerOutParameter(10,java.sql.Types.INTEGER);    
      cstmt.registerOutParameter(11,java.sql.Types.INTEGER);  
    
       //System.out.print(this.tableName+"  "+this.fieldList+"  "+this.primaryKey+"  "    +this.where+"  "+this.order+"  "+this.sortType+"  "+super.getRecordCount()+"  "+super.getPageSize()+"  "+super.getPage());    
      cstmt.executeUpdate();
       super.setRecordCount(cstmt.getInt(10));
       super.setPageCount(cstmt.getInt(11));
    
       //System.out.println(cstmt.getInt(10));
       //System.out.println(cstmt.getInt(11));
    
      ResultSet rs=cstmt.executeQuery();

       //设置当前页
       if( super.getPage()>= super.getPageCount())     super.setPage( super.getPageCount());
    
      metaData = rs.getMetaData();
      columnCount =  metaData.getColumnCount();
      columnNames = new String[columnCount];
             // Get the column names and cache them.
             // Then we can close the connection.
         for( int column = 0; column < columnCount; column++) {
            columnNames[column] = metaData.getColumnLabel(column+1);
          }
     //rs.last();
        setShowPage(rs.getRow());
         //rs.absolute(getRecode());
  
         if(rs.next()){
       for ( int i=0;i         String[]            rsRow = {};
         rsRow = new String[columnCount];  
               for( int column = 0; column < columnCount; column++) {
                 rsRow[column] = rs.getString(column+1);
               }
                 list.addElement(rsRow);    
           //    list.addElement(rs.getObject(i));
                 if (!rs.next())
                     break;
          }          
        }
        
        
    
      rs.close();
      cstmt.close();
      dbc.close();
       return true;
  }
   catch (SQLException sqle){
      sqle.printStackTrace();
       return false;
  }
    }  
  

     /**
  * @return poolName
  */

     public String getPoolName() {
   return poolName;
    }

     /**
  * @param poolName 要设置的 poolName
  */

     public void setPoolName(String poolName) {
   this.poolName = poolName;
    }
}

 
4,条件查询页面recordsListSearch.jsp,主要是根据数据库字段来组成查询条件,值得注意的是:
            
这里option的值都完全是数据表中的字段名,因为最终是靠这些字段来生成SQL语句中的Where查询条件。
<%@ page contentType= "text/html; charset=gb2312" language= "java" errorPage="" %>


"Content-Type"
content= "text/html; charset=gb2312">
查询






"left" width= "102%">
          
  
    
    
  
    

    
  
          
      
    
                              
                                                                    
  
"24%" height= "30" background= "p_w_picpaths/opbg.gif">"p_w_picpaths/a.gif">  
  当前位置:查询
  
"height:60px">

  
"post" action= "recordsListResult.jsp" name= "form2" >
  "600" border= "1" align= "center" cellpadding= "0" cellspacing= "0"class= "search">    
    
      
    
            
                
    "#f1f4f5" height= "32">          
        
"30"  background= "p_w_picpaths/s_02.gif">"p_w_picpaths/s_01.gif" width= "284" height= "30">

      
          
          
          
            
          
          
                    
      
        
"64">
              
          
"39">
          字段:
          
"83">
                  
          
"61">
          查询条件:                                            
          
"77">
                  
          
"145">
          "text" name= "T1" id= "T1" size= "20">      
          "text" name= "T2" id= "T2" size= "20" style= "display:none" class= "Wdate" onFocus= "new WdatePicker(this)">
          
"95">
          "确定" name= "B1"
          "清除" name= "B2"
          
  
    
"38">
    
    "p_w_picpath" src= "p_w_picpaths/sear1.gif" name= "sm1">    
    

      
    





 
5,分页显示页面recordsListResult.jsp,完成分页,基本的参数也在这里配置以最终传入分页存储过程完成分页。
由于这个页面是我们配置的地方,所以这里详加说明:
比较重要的地方我会以
标出并加以详细说明;
要进行更改和配置的地方以
标出,同时会在前面配以编号显示,读者朋友可以根据编号逐一查阅。

<%@ page contentType= "text/html; charset=gb2312" language= "java" errorPage="" %>
<%@ taglib prefix= "c" uri= "http://java.sun.com/jstl/core" %>
<%@ 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" %>


"list1"
scope="request" class="sqlDBconnect.Listss" />

"true"
>

"Content-Type"
content="text/html; charset=gb2312">
显示


"css/barStyle.css" rel="stylesheet" type="text/css">
"css/search1.css" rel="stylesheet" type="text/css">
"css/css1.css" rel="stylesheet" type="text/css">
"css/ny.css" rel="stylesheet" type="text/css">


"#fffff7" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0">


"left" width="102%">
          
  
    
    
  
    
    
  
    
"24%" height="30" background="p_w_picpaths/opbg.gif">"p_w_picpaths/a.gif">  
      当前位置:查询结果
  
"height:60px">



"selfweb" value="recordsListResult" scope="request"/>
"780" border="0" align="center" cellpadding="0" cellspacing="1" bordercolor="#b6bfdc" bgcolor="#b6bfdc"class="search">

    "#FFFFFF" >    
        
    
               class="bar1">    
                      
    
    
    
    
    
    
    
    
    
    
    
        
              
      
"PageSize" scope="request" value="20"/>
"ShowPage" scope="request" value="1"/>
"PageCount" scope="request" value="0"/>
<%
  //receive the parameter from the previousPage and nextPage
  String Page=request.getParameter("page");
  request.setAttribute("Page",Page);
%>  
"Page">
    "ShowPage" scope="request">
  "${Page}"/>
    



"${list1}" property="pageSize">
    "${PageSize}"/>

"${list1}" property="page">
    "${ShowPage}"/>

  
<%
String S2=request.getParameter("S2")    ;
if(S2!=null)
    session.setAttribute("S2",S2);
%>

  
"${list1}" property="poolName" value="bpDbCon"/>
"${list1}" property="tableName" value="recordsList"/>
"${list1}" property="fieldList" value="strPoNo,strGrNo,strDate,nItem,nCount,fltUnitPrice,strApplicant,strMaterialDesc,strMaterialNo,strMaterialName,strDeptName,strSignDate"/>
"${list1}" property="primaryKey" value="nId"/>

"S2">
    "${list1}" property="where">
  "false" value="${S2}"/>
    


"${list1}" property="order" value=""/>
"${list1}" property="sortType" value="2"/>
    
if test="${list1.execute==1}">
    "ShowPage" scope="request">
  "${list1.page}"/>
    

    "PageCount" scope="request">
  "${list1.pageCount}"/>
    

    "PageSize" scope="request">
  "${list1.pageSize}"/>
    
  
    "i" begin="0" end="${list1.pageSize-1}" step="1">
  "Class" value="search3"/>
  if test="${i%2==0}">
  "Class" value="search4"/>
  
if>  
  if test="${i>
      "${list1}"
property="row">
    "${i}"/>
      
    
      
    
class='"${Class}"/>' onmouseover="this.style.backgroundColor='#dae2ed'" onmouseout="this.style.backgroundColor=''">
      

      
      
      
      
      
      
      
      
      
      
      
    
  if>  
    
if>
    "this.style.backgroundColor='#dae2ed'" onmouseout="this.style.backgroundColor=''">
  
            
"21" colspan="12">"p_w_picpaths/sea.gif" width="354" height="21">
"8%" align="center" >P/O "8%" align="center" >GR NO. "8%" align="center" >物料编号 "9%" align="center" >物料名称 "9%" align="center" >日期 "6%" align="center">Item "6%" align="center">数量 "7%" align="center">单价 "7%" align="center">请购人 "8%" align="center">所属部门 "8%" align="center">签收日期 "16%" align="center">物料描述
"center"><%=list1.getString("strPoNo")%> "center"><%=list1.getString("strGrNo")%> "center"><%=list1.getString("strMaterialNo")%> "center"><%=list1.getString("strMaterialName")%> "center"><%=list1.getString("strDate")%> "center"><%=list1.getString("nItem")%> "center"><%=list1.getString("nCount")%> "center"><%=list1.getString("fltUnitPrice")%> "center"><%=list1.getString("strApplicant")%> "center"><%=list1.getString("strDeptName")%> "center"><%=list1.getString("strSignDate")%> "center"><%=list1.getString("strMaterialDesc")%>
"12">
      "100%" border="0" cellpadding="0" cellspacing="0">
        
    <%@ include file="devPage.jsp"%>
      
  
  
  
  
  


 
6,分页脚本devPage.jsp,提取的共用代码段,完成翻页
<%@page contentType= "text/html; charset=gb2312" language= "java"  errorPage=""%>
<%@ 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 prefix= "c" uri= "http://java.sun.com/jstl/core" %>

"post"  action='"${selfweb}"/>.jsp' name="PageForm">
  
    class="search4" width="100%" height="100%">
    "p_w_picpaths/y1.gif" width="5" height="7">
    "_self">第一页
    if test="${ShowPage==1}">  
  "p_w_picpaths/y2.gif" width="4" height="7">前一页  
    
if>
    if test="${ShowPage!=1}">  
  "p_w_picpaths/y2.gif" width="4" height="7">
  <%request.setAttribute("prev",String.valueOf(Integer.parseInt(request.getAttribute("ShowPage").toString())-1));%>
  "_self">前一页  
    
if>
    if test="${ShowPage==PageCount}"> "p_w_picpaths/y3.gif" width="4" height="7">下一页  
    
if>
    if test="${ShowPage!=PageCount}"> "p_w_picpaths/y3.gif" width="4" height="7">  
  <%request.setAttribute("next",String.valueOf(Integer.parseInt(request.getAttribute("ShowPage").toString())+1));%>
  "_self">下一页  
    
if>
    "p_w_picpaths/y4.gif" width="5" height="7">"_self">最后一页
    记录总数"${list1.recordCount}"/>
    每页"${PageSize}"/>
    当前页["${ShowPage}"/>/"${list1.pageCount}"/>页]  
    页数
      
    

 
 
大功告成,不过你不要以为前面讲得那么多就配起来很繁琐,其它不然,前面所讲的只是让你对这种分页架构有一个大体的了解,从细节方面你只需要注意以下几个方面就可以:
1,配置Tomcat服务器(你别告诉我你不会,如果真不会,那没办法了你自行了断吧,嘿嘿)
2,建立数据库和结构表,对了还有分页存储过程P_viewPage.sql一并弄好
3,配置数据库连接池,几句话而已,你完全可以照我的例子弄
4,配查询页
一般情况下你只需更改下面这个地方:
       
根据自己的数据表显示不同字段
5,配置分页显示
根据你自己的情况你最多只需更改上面提到的recordsListResult.jsp中的7个地方
 
Job Done!为你自己喝彩吧!