解决方案 »

  1.   


    function getChildProdPageInfo(childProdDescLink,newsCount,pageIdx,pageDivId)
    {
    var pageItemHtml='';
    var pageForwardHtml = '';
    var pageReverseHtml = '';
    var isExtend = false;
    var pageInfoHtml='';
    for(idx=0,len=newsCount;idx<len;idx++)
    {
    //判断是否第一页,如是,不加上一页链接,如不是,加上一页连接
    if((idx+1)==(pageIdx-1)&&pageIdx!=1)
    {
    pageForwardHtml='<a href="#" target="_self" onclick="getChildProdPageInfo(\''+childProdDescLink+'\','+newsCount+','+(pageIdx-1)+',\''+pageDivId+'\')" >上一页</a>';
    }
    //判断是否最后一页,如是,不加下一页链接,否则加上下一页链接
    if(pageIdx<len&&(idx+1)==(pageIdx+1))
    {
    pageReverseHtml='<a href="#" target="_self" onclick="getChildProdPageInfo(\''+childProdDescLink+'\','+newsCount+','+(pageIdx+1)+',\''+pageDivId+'\')" >下一页</a>';
    }
    //判断是否超过6页,如果超过,加extend扩展,否则加每一页的连接
    if(Math.abs(idx+1-pageIdx)>5&&isExtend==false)
    {

    pageItemHtml+='<a href="#" target="_self" onclick="getChildProdPageInfo(\''+childProdDescLink+'\','+newsCount+','+(idx+1)+',\''+pageDivId+'\')" >...</a>';
    isExtend=true;
    }
    else
    {
    //当前页
    if((idx+1)==pageIdx)
    {
    pageItemHtml+='<a href="#" target="_self" onclick="getChildProdPageInfo(\''+childProdDescLink+'\','+newsCount+','+(idx+1)+','+pageDivId+'\')" >'+'<font class="red">['+pageIdx+']</font>'+'</a>';
    }
    else
    {
    pageItemHtml+='<a href="#" target="_self" onclick="getChildProdPageInfo(\''+childProdDescLink+'\','+newsCount+','+(idx+1)+',\''+pageDivId+'\')" >'+(idx+1)+'</a>';
    }
    isExtend=false;
    }
    }

    //组合最终的分页信息并打开当前点击页的咨询连接
    pageInfoHtml+='<div class="Page">';
    pageInfoHtml+=pageForwardHtml;
    pageInfoHtml+=pageItemHtml;
    pageInfoHtml+=pageReverseHtml;
    pageInfoHtml+='</div>';
    $('#'+pageDivId).html(pageInfoHtml);
    //刷新静态化html咨询页面
    var index = childProdDescLink.indexOf('html');
    var htmlPath = '/webfin/'+childProdDescLink.substr(0,(index-1))+'_'+pageIdx+'.html';
    window.open(htmlPath,"prodDetailHtmliFrame");}
    参考如上,之前写的,支持"上一页2,3,4,5...下一页"这种,当前页高亮显示,传的数据格式自己定,前端分页
      

  2.   

    你想要实现的是在Servlet里面逻辑实现分页,然后直接访问对应的Servlet时候返回相应的html静态页面对不?
    其实对于分页这个问题,是很常见的一个问题,你可以系统地学习一下,要从下面几个方向考虑:
    1:要实现分页的数据是关于什么的,总共有多少条数据
    2:每页显示多少条数据,在总数据条数跟每页显示数据条数一定的条件下,页数如何计算(比如总共101条数据,每页显示10条等等这些细节问题)
    3:对于每页来说它就表示10条数据,那么对于数据库来说如何对应起来,比如有一条是第三页的第五条数据,那么对应数据库里应该对应第几条(这一点是最关键的一点)
    4:上面的对应关系确定后,如果是mysql可以用limit实现,那么oracle中如何实现呢
    虽然目前有封装好的分页框架,但是它的实现方式无非就是上面那样,至于代码的话我就不给了,如果实在是想要的话联系我吧,1026555477
      

  3.   

    以前写的分页后台,主要获取各项参数,可以参考下package com.vanda.dao;import org.apache.log4j.Logger;
    import java.sql.*;import com.vanda.bean.PageBean;public class QueryPage {

    private static final Logger log = Logger.getLogger(QueryPage.class);
    private String sql;              //查询sql
    private int page;                //当前页
    private int rowCountPerpage;     //每页记录数
    private int totalRows = 0;       //总页数
    private int pageCount = 0;       //页数
    private int iBegin = 0;          //
    private int pageRowCount = 0;    //当前页记录数

    public QueryPage(String sql,int page,int rowCountPerpage){
    this.sql = sql;
    this.page = page;
    this.rowCountPerpage = rowCountPerpage;
    }

    /**
     * 查询总页数
     */
    public void queryTotalRows(){
    String sql1 = "select count(1) from (" + sql + ")";
    Connection conn = null;
    PreparedStatement pstmt = null;
    log.info("开始执行 SQL:" + sql);
    try{
    conn = DbConnection.getConnection();
    conn.setAutoCommit(false);
    pstmt = conn.prepareStatement(sql1,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
    ResultSet rs = pstmt.executeQuery();
    //rs.last();
    //totalRows = rs.getRow();
    while(rs.next()){
    totalRows = rs.getInt(1);
    }
    rs.close();
    }catch(SQLException e){
    log.error("查找总记录数失败:" + e.getMessage()+"SQL:"+sql1);
    try{
    conn.rollback();
    }catch(SQLException ex){
    log.error("数据回滚失败:" + ex.getMessage());
    }
    }finally{
    try{
    pstmt.close();
    conn.close();
    }catch(SQLException ex1){
    log.error("关闭连接失败:" + ex1.getMessage());
    }
    }
    }
    /**
     * 得出总页数
     */
    public void queryPageCount(){
    pageCount = (totalRows + rowCountPerpage - 1)/rowCountPerpage;
    //int pageCount = (totalRows%rowCountPerpage)==0?(totalRows/rowCountPerpage):(totalRows/rowCountPerpage+1);
    if(pageCount < 1){
    pageCount = 1;
    }
    }

    /**
     * 得到当前页数
     */
    public void queryPage(){
    if(page < 1){
    page = 1;
    }
    if(page > pageCount){
    page = pageCount;
    }
    }
    /**
     * 获取当前页第一条记录的行编号
     */
    public void queryIBegin(){
    iBegin = rowCountPerpage * (page - 1) + 1;
    }
    /**
     * 获取当前页记录数
     */
    public void queryPageRowCount(){
    int num = totalRows - rowCountPerpage * (page - 1);
    pageRowCount = (num >= rowCountPerpage) ? rowCountPerpage : num;
    }

    /**
     * 获取查询参数
     * @return
     */
    public PageBean query(){
    PageBean pageBean = new PageBean();
    this.queryTotalRows();//总记录数
    this.queryPageCount();//总页数
    this.queryPage();//当前页
    this.queryIBegin();//当前页第一条记录的行编号
    this.queryPageRowCount();//当前页记录数
    int iEnd = iBegin + pageRowCount;
    //解析sql,得到分页后查询sql
    String pageSql = "SELECT T2.* FROM (SELECT T1.*, ROWNUM AS RN FROM ( " + sql + " ) T1 ";
    pageSql = pageSql + " ) T2 WHERE ";
    pageSql = pageSql + " T2.RN < " + iEnd + " AND ";
    pageSql = pageSql + " T2.RN >=" + iBegin;

    //将参数封装在bean中
    pageBean.setTotalRows(totalRows);
    pageBean.setPageCount(pageCount);
    pageBean.setPage(page);
    pageBean.setIBegin(iBegin);
    pageBean.setPageRowCount(pageRowCount);
    pageBean.setSql(pageSql);
    return pageBean;
    }

    }
      

  4.   

    javabean的内容package com.vanda.bean;public class PageBean {

    private int page;                //当前页
    private int rowCountPerpage;     //每页记录数
    private int totalRows;           //总记录数
    private int pageCount;           //总页数
    private int iBegin;              //当前页第一条记录行编号
    private int pageRowCount;        //当前页记录数
    private String sql;

    public PageBean(){}
    public PageBean(int page,int rowCountPerpage){
    this.page = page;
    this.rowCountPerpage = rowCountPerpage;
    }

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

    public int getRowCountPerpage() {
    return rowCountPerpage;
    } public void setRowCountPerpage(int rowCountPerpage) {
    this.rowCountPerpage = rowCountPerpage;
    }

    public int getTotalRows() {
    return totalRows;
    } public void setTotalRows(int totalRows) {
    this.totalRows = totalRows;
    }

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

    public int getIBegin() {
    return iBegin;
    } public void setIBegin(int iBegin) {
    this.iBegin = iBegin;
    }

    public int getPageRowCount() {
    return pageRowCount;
    } public void setPageRowCount(int pageRowCount) {
    this.pageRowCount = pageRowCount;
    }
    public String getSql() {
    return sql;
    }
    public void setSql(String sql) {
    this.sql = sql;
    }}
      

  5.   

    数据库连接package com.vanda.dao;import javax.naming.Context;
    import javax.naming.InitialContext;
    import javax.naming.NamingException;
    import javax.sql.DataSource;import org.apache.log4j.Logger;import java.sql.*;public class DbConnection{
    private static final Logger log = Logger.getLogger(DbConnection.class);
    public static final String databasesource = "jdbc/JG_TALK";
    public static final String jdbcUrl="jdbc:oracle:thin:@192.168.1.2:1521:ORCL";
    public static final String username="JG_TALK";
    public static final String password="JJJJJJ";

    public static Connection getConnection(){
    Connection conn = null;
    try {
    Context initCtx = new InitialContext();
    Context envCtx = (Context) initCtx.lookup("java:comp/env");
    DataSource ds = (DataSource) envCtx.lookup(databasesource);
    conn = ds.getConnection();
    } catch (SQLException e) {
    log.error("从连接池获取连接失败!" + e.getMessage());
    throw new NullPointerException("无法连接数据库!");
    } catch (NamingException e) {
    log.error("寻找数据源失败!" + e.getMessage());
    throw new NullPointerException("无法连接数据库!");

    return conn;
    }

    public static Connection getConnection2(){
    Connection conn=null;
    try {
    Class.forName("oracle.jdbc.driver.OracleDriver");
    conn= DriverManager.getConnection(jdbcUrl, username, password);
    } catch (ClassNotFoundException e) {
    e.printStackTrace();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    return conn;
    }

    }