目前手头上没有具体的实例,不过可以把想法告诉你,有两种方法可以实现:
方法一,把所有的记录读出来,放在List里,然后控制每一页显示的数量,控制显示数量在struts中是用<logic:iterate/>和<bean:write/>标签来实现,一个控制循环,一个控制显示,具体分页的方法要自己来定义,可以自己定义一个标签,也可以在页面里写JSP代码。
方法二,是只读取当前页面所需要的数据,每次翻页都是从数据库读取,其他和方法一一致。优缺点分析:方法一可以让用户感觉上下翻页速度快,缺点是在首次读数据的时候慢,而且不能及时更新读出来的数据,不能保证C/S的数据一致性。方法二优点是能够保证C/S数据一致,每次从数据库读数据速度比方法一快,缺点是:多次从数据库读数据,对数据库服务器的稳定性影响比较大。

解决方案 »

  1.   

    http://www.chinajavaworld.net/forum/topic.cgi?forum=48&topic=3944&show=100[原创]在struts中分页功能的一种实现
     相关附件: (共 76800 字节)我的项目中的分页功能
    1,思路
    使用一个页面控制类,它记录页面信息,如上页,下页,当前页等。在查询的Action中,将这个控制类和查询条件一起传递给数据库访问bean,然后将这两个参数保存在用户session中。在分页控制Action中,利用接收到的分页参数调用数据库访问的bean.
    2,实现
    见word附件
     
      

  2.   

    下面是lykDAO.java文件,对不起,没找到与上面对应的DAO。
    package  emptyprj;
    import emptyprj.lyk;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;import java.util.Collection;
    import java.util.ArrayList;public class lykDAO {    private Connection con;
        private int rowCount;
        private int pageCount;
        private int length;      
        private String pagestr;
        public int getLength()  {  return (this.length);   }
        public void setLength(int length)  { this.length=length; }  
        public String getPagestr(int ipage)
        {
               String strPage="";
              if(getLength()>0)
              {
                strPage+="共";
                strPage+=String.valueOf(rowCount);
                strPage+="条记录,共";
                strPage+=String.valueOf(pageCount);
                strPage+="页,当前是第";
                strPage+=String.valueOf(ipage);
                strPage+="页,      ";
           
                int istart,iend;
                istart=ipage-5;
                if(istart<0) {istart=0;}
                iend=istart+10;
                if(iend>pageCount) {iend=pageCount;}
                istart=iend-10;
                if(istart<0) {istart=0;}
                for(int i=istart;i<iend;i++)
                {
                    strPage+="<a href='lykAction.do?action=find&page=";
                    strPage+=String.valueOf(i+1);
                    strPage+="'>";
                    strPage+=String.valueOf(i+1);
                    strPage+="</a>"; 
                    strPage+="  ";
                }
           }
           this.pagestr=strPage;
           return strPage;
      }  public lykDAO(Connection con) {
        this.con = con;
      }  public void create(lyk m_lyk) throws SQLException {
        PreparedStatement ps = null;
        //<createSQL>
        String sql = "INSERT INTO dbo.TABLE1 VALUES (?,?,?)";
        //</createSQL>
        try {
          if (con.isClosed()) {
            throw new IllegalStateException("error.unexpected");
          }
          ps = con.prepareStatement(sql);
          //<create>
          ps.setString(1,m_lyk.get姓名());
          ps.setString(2,m_lyk.get性别());
          ps.setInt(3,m_lyk.get年龄());
          //</create>      if (ps.executeUpdate() != 1) {
            throw new SQLException ("error.create.lyk");
          }
        } catch (SQLException e) {
         
            e.printStackTrace();
            throw new RuntimeException("error.unexpected");
          
        } finally {
          try {
            if (ps != null)
              ps.close();
          } catch (SQLException e) {
            e.printStackTrace();
            throw new RuntimeException("error.unexpected");
          }
        }
      }  public void update(lyk m_lyk,String keyID) {
        PreparedStatement ps = null;
        //<updateSQL>
       String sql = "UPDATE dbo.TABLE1 SET 姓名 = ?,性别 = ?,年龄 = ? WHERE 姓名 = ?";
          //</updateSQL>
        try {
          if (con.isClosed()) {
            throw new IllegalStateException("error.unexpected");
          }
          ps = con.prepareStatement(sql);
          //<update>
          ps.setString(1,m_lyk.get姓名());
          ps.setString(2,m_lyk.get性别());
          ps.setInt(3,m_lyk.get年龄());
          //</update>      ///////////////
          //<updatekeyID>
          ps.setString(4,keyID);
              //</updatekeyID>
          if (ps.executeUpdate() != 1) {
            throw new SQLException (
              "error.removed.lyk");
          }    } catch (SQLException e) {
          e.printStackTrace();
          throw new RuntimeException("error.unexpected");
        } finally {
          try {
            if (ps != null)
              ps.close();
          } catch (SQLException e) {
            e.printStackTrace();
            throw new RuntimeException("error.unexpected");
          }
        }
      } public void removeID(String keyID) {
       
        //<removeIDSQL>
        String sql="DELETE FROM dbo.TABLE1 WHERE ";
        sql+="姓名";
        sql+=" = ?";
        //</removeIDSQL>    PreparedStatement ps = null;
        try {      if (con.isClosed()) {
            throw new IllegalStateException("error.unexpected");
          }      ps = con.prepareStatement(sql);
          
          //<setremovekeyIDdata>
          ps.setString(1,keyID);
              //</setremovekeyIDdata>
       
          if (ps.executeUpdate() != 1) {
            throw new SQLException (
              "error.removed.lyk");
          }    } catch (SQLException e) {
          e.printStackTrace();
          throw new RuntimeException("error.unexpected");
        } finally {
          try {
            if (ps != null)
              ps.close();
          } catch (SQLException e) {
            e.printStackTrace();
            throw new RuntimeException("error.unexpected");
          }
        }
      }  public Collection findSQL(String sql,int ipage) {
        PreparedStatement ps = null;
        ResultSet rs = null;
        ArrayList list = new ArrayList();    try {
          if (con.isClosed()) {
            throw new IllegalStateException("error.unexpected");
          }
          ps = con.prepareStatement(sql,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
          rs = ps.executeQuery();
              rs.absolute(-1);
          rowCount=rs.getRow();
         
          int offset=1;
          int pagesize=getLength();
          if(getLength()<1)
          {
              pagesize=rowCount;
              pageCount=1;
          }
          else
          {
              pageCount=rowCount/getLength()+((rowCount%getLength())>0?1:0);
              offset=(ipage-1)*getLength()+1;
              if(offset<1)offset=1;
              if(offset>rowCount)offset=rowCount;        
             
          } 
          rs.absolute(offset);
          for(int i=0;i<pagesize;i++) {           
            lyk m_lyk= new lyk(); 
            //<find>
          m_lyk.set姓名(rs.getString(1));
          m_lyk.set性别(rs.getString(2));
          m_lyk.set年龄(rs.getInt(3));
          //</find>        rs.next();
            list.add(m_lyk);      }      return list;    } catch (SQLException e) {
          e.printStackTrace();
          throw new RuntimeException("error.unexpected");
        } finally {
          try {
            if (ps != null)
              ps.close();
            if (rs != null)
              rs.close();
          } catch (SQLException e) {
            e.printStackTrace();
            throw new RuntimeException("error.unexpected");
          }
        }
      }}