(急) 求struts分页代码 运行通过立马给100分 需求下面详细说了谢谢各位了需要个实现struts MVC模式的分页例子 需要能运行就能跑起来 1。不要和hibernate集成的 2。而且不要查询出的数据是所有的
而是翻一页查询出需要显示的数据量 小弟在此谢谢了 在线等 可以发我邮箱里 最好是项目打成包 方便的话给个XXX.sql也行
最重要的忘说了 3。数据库要 oralce 下的 mysql的就不要了   在线等
谢谢各位了   运行后 立马给你另外50分

解决方案 »

  1.   

    是的 详细的信息我应经说了
    oracle 数据库
      

  2.   

    struts分页代码  ibatic的分页网上都有呀。--
    oracle的?懂得了思想还是自己改。
      

  3.   

    用sql语句分页 用struts接收 当前页 页面大小等信息
      

  4.   

      TYPE type_cur IS REF CURSOR;     --定义游标变量用于返回记录集
        
      PROCEDURE DotNetPagination(      
      Pindex in number,                --分页索引   
      Psql in varchar2,                --产生dataset的sql语句
      Psize in number,                 --页面大小
      Pcount out number,               --返回分页总数
      v_cur out type_cur               --返回当前页数据记录
      );  
      
      procedure DotNetPageRecordsCount(
      Psqlcount in varchar2,           --产生dataset的sql语句                           
      Prcount   out number             --返回记录总数
      );
      
    end DotNot;
    =======================================create or replace package body DotNet is --***************************************************************************************
     
     PROCEDURE DotNetPagination(
      Pindex in number,
      Psql in varchar2, 
      Psize in number,  
      Pcount out number,
      v_cur out type_cur
     )
     AS  v_sql VARCHAR2(1000);
      v_count number;  
      v_Plow number;
      v_Phei number;
     Begin
      ------------------------------------------------------------取分页总数
      v_sql := 'select count(*) from (' || Psql || ')';
      execute immediate v_sql into v_count;
      Pcount := ceil(v_count/Psize);
      ------------------------------------------------------------显示任意页内容
      v_Phei := Pindex * Psize + Psize;
      v_Plow := v_Phei - Psize + 1;
      --Psql := 'select rownum rn,t.* from cd_ssxl t' ;            --要求必须包含rownum字段
      v_sql := 'select * from (' || Psql || ') where rn between ' || v_Plow || ' and ' || v_Phei ;  open v_cur for v_sql;
      
     End DotNetPagination;
     
     --**************************************************************************************
     
     procedure DotNetPageRecordsCount(
      Psqlcount in varchar2,
      Prcount   out number
      )
      as
      
       v_sql varchar2(1000);
       v_prcount number;
       
      begin
      
       v_sql := 'select count(*) from (' || Psqlcount || ')';
       execute immediate v_sql into v_prcount;
       Prcount := v_prcount;                  --返回记录总数                                                      
       
      end DotNetPageRecordsCount;
      
     --**************************************************************************************
     
    end DotNot;------------------------------------------------------------------------------------------------------------------------------------------------------------------------
      

  5.   

    刚才第一行每有复制上!create or replace package DotNet is
    TYPE type_cur IS REF CURSOR; --定义游标变量用于返回记录集
        
      PROCEDURE DotNetPagination(   
      Pindex in number, --分页索引   
      Psql in varchar2, --产生dataset的sql语句
      Psize in number, --页面大小
      Pcount out number, --返回分页总数
      v_cur out type_cur --返回当前页数据记录
      );   
       
      procedure DotNetPageRecordsCount(
      Psqlcount in varchar2, --产生dataset的sql语句   
      Prcount out number --返回记录总数
      );
       
    end DotNot;
    =======================================
      

  6.   

    看了下 似乎很强大 但是没用过 谢谢了 能不能重新发个完整点的 把Action 中怎么调用的还是怎么拼的sql也粘上 谢谢了
      

  7.   


    看了下 似乎很强大 但是没用过 谢谢了 能不能重新发个完整点的 把Action 中怎么调用的还是怎么拼的sql也粘上 谢谢了
      

  8.   

    你看一下这个,更完整!!--包create or replace package pkg_query as
      type cur_query is ref cursor;
    end pkg_query;--过程CREATE OR REPLACE  PROCEDURE "PRC_QUERY" (p_tableName   
            in  varchar2,   --表名
            p_strWhere         in  varchar2,   --查询条件
            p_orderColumn      in  varchar2,   --排序的列
            p_orderStyle       in  varchar2,   --排序方式
            p_curPage          in out Number,  --当前页
            p_pageSize         in out Number,  --每页显示记录条数
            p_totalRecords     out Number,     --总记录数
            p_totalPages       out Number,     --总页数
            v_cur              out pkg_query.cur_query)   --返回的结果集
    IS
       v_sql VARCHAR2(1000) := '';      --sql语句
       v_startRecord Number(4);         --开始显示的记录条数
       v_endRecord Number(4);           --结束显示的记录条数
    BEGIN
       --记录中总记录条数
       v_sql := 'SELECT TO_NUMBER(COUNT(*)) FROM ' || p_tableName || ' WHERE 1=1';
       IF p_strWhere IS NOT NULL or p_strWhere <> '' THEN
           v_sql := v_sql || p_strWhere;
       END IF;
       EXECUTE IMMEDIATE v_sql INTO p_totalRecords;   --验证页面记录大小
       IF p_pageSize < 0 THEN
           p_pageSize := 0;
       END IF;   --根据页大小计算总页数
       IF MOD(p_totalRecords,p_pageSize) = 0 THEN
           p_totalPages := p_totalRecords / p_pageSize;
       ELSE
           p_totalPages := p_totalRecords / p_pageSize + 1;
       END IF;   --验证页号
       IF p_curPage < 1 THEN
           p_curPage := 1;
       END IF;
       IF p_curPage > p_totalPages THEN
           p_curPage := p_totalPages;
       END IF;   --实现分页查询
       v_startRecord := (p_curPage - 1) * p_pageSize + 1;
       v_endRecord := p_curPage * p_pageSize;
       v_sql := 'SELECT * FROM (SELECT A.*, rownum r FROM ' ||
                '(SELECT * FROM ' || p_tableName;
       IF p_strWhere IS NOT NULL or p_strWhere <> '' THEN
           v_sql := v_sql || ' WHERE 1=1' || p_strWhere;
       END IF;
       IF p_orderColumn IS NOT NULL or p_orderColumn <> '' THEN
           v_sql := v_sql || ' ORDER BY ' || p_orderColumn || ' ' || p_orderStyle;
       END IF;
       v_sql := v_sql || ') A WHERE rownum <= ' || v_endRecord || ') B WHERE r >= '
                || v_startRecord;
       DBMS_OUTPUT.put_line(v_sql);
       OPEN v_cur FOR v_sql;
    END prc_query;
    //java的一个分页类
    package XXT.DB;
    import java.sql.*;
    import java.util.*;
    import oracle.jdbc.driver.OracleTypes;public class BestOraclePageBean {
         //获得数据需要的参数
         private Connection conn;//数据库连接对象     private String s_tableName="";//从那个表中取数据
         private String s_whereCondition="";//条件
         private String s_orderColumn="";//排序字段,不能为空!
            private String s_orderStyle ="ASC";//按升序还是降序排列数据,ASC 升序,DESC降序     private int i_totalRecords;//满足条件的数据库中的记录数
         private int i_curPage=1;//当前页
         private int i_totalPages;//如果按照每页显示的数据行数,则共可以显示的页面数
         private int i_multiple=10; //一次从数据库中取出的数据,是每页显示的数据的倍数
         private int i_pageSize=20;//每页显示的数据行数
     
         private Vector pageData;//存放一次要显示的数据     public BestOraclePageBean() {
             pageData=new Vector();
          }
         public BestOraclePageBean(Vector v) {
             pageData=v;
          }
         public void setData(Vector v) {
             pageData=v;
          }
         public void setConnecton(Connection con) {
             this.conn=con;
         }
         public void setTableName(String tablename) {
             this.s_tableName =tablename;
             //取出字段个数
           /*
       try {
        Statement stmt= conn.createStatement();
        ResultSet rs=stmt.executeQuery("Select  count( *)   From   Syscolumns C, Sysobjects N where N.id=C.id and N.name='"+this.s_TableName+"'");
              rs.next();
              i_FieldsCount=rs.getInt(1);
              rs.close();
              stmt.close();
       } catch (SQLException e) {
        // TODO Auto-generated catch block
        System.out.println("获得表的字段个数错误"+e.toString());
       }
             */     }
       
         public void setWhereCondition(String strWhere) {
             this.s_whereCondition =strWhere;
         }
         public void setOrderFieldName(String orderField) {
             this.s_orderColumn =orderField;
         }
         public void setOrderStyle(String orderStyle) {
             this.s_orderStyle =orderStyle;
         }     public void setPageSize(int pageSize) {
             this.i_pageSize = pageSize;
           
         }
         public void setMultiple(int multiple) {
             this.i_multiple = multiple;
         }
         public int getTotalRecords() {
             return this.i_totalRecords;
         }     public int getCurPage() {
             return this.i_curPage;
         }     public int getPageSize() {
             return this.i_pageSize;
         }
         public int getTotalPages() {
             return this.i_totalPages;
         }
         public int getMultiple() {
             return this.i_multiple;
             
         }
         //得到每页的数据
         public ResultSet getPageData(int page) {
             this.i_curPage=page;
             pageData.clear();
            
             CallableStatement call = null;
             ResultSet rs=null;
             try {
               String sql= "{ call prc_query(?,?,?,?,?,?,?,?,?) }";
          call = conn.prepareCall(sql);
           call.setString(1,this.s_tableName);
           call.setString(2,this.s_whereCondition);
           call.setString(3,this.s_orderColumn);
           call.setString(4,this.s_orderStyle);
           call.setInt(5,this.i_curPage);
           call.setInt(6,this.i_pageSize);
           call.registerOutParameter(5,OracleTypes.INTEGER);
           call.registerOutParameter(6,OracleTypes.INTEGER);
           call.registerOutParameter(7,OracleTypes.INTEGER);
           call.registerOutParameter(8,OracleTypes.INTEGER);
              call.registerOutParameter(9, OracleTypes.CURSOR);
           call.execute();
           this.i_curPage=(int)call.getInt(5);
           this.i_pageSize=(int)call.getInt(6);
           this.i_totalRecords=(int)call.getInt(7);
           this.i_totalPages=(int)call.getInt(8);
           rs=(ResultSet) call.getObject(9);
              return rs;
             } catch (SQLException ex) {
                 System.out.println("调用存储过程获得数据错误:"+ex.toString());
                 return null;
             }
             
         }     }