struts分页

纯struts分页 
网上写的都太专业,太复杂了(至少我看着复杂),分页无非就是取出特定的记录嘛

大致的分页思路如下:
1.取出分页处理中用到的各种变量,主要的几个有:记录集总数(rscount),到第几页(gopage),分页长度(pagelength),实际页码(realpage),总页数(pagecount)
2.根据上面的变量构造SQL语句,基本思路是取出 (当前页-1)*分页长度 开始的 分页长度 条记录
简单地写一个sql语句吧:select top 10 * from table where id not in (select top 20 id from table) 意思是取出第21条记录开始的10条记录.[使用not in的效率并不是很高,所以这种方法还有待改进,以后肯定不能这么取,现在么先用着]

自己根据项目需要写了个
先写了个pagedao.java类用来处理分页过程中的各种变量
package  net.caiban.dao;

import  java.sql.Connection;
import  java.sql.ResultSet;
import  java.sql.Statement;
import  java.util.ArrayList;

import  net.caiban.conn.DataConn;

public   class  PageDao  {
    
public int recordCount(String sql){  //取记录总数
        DataConn dc = new DataConn();
        Connection conn;
        
        
try {
            conn 
= dc.getConnection();
            Statement stmt 
= conn.createStatement();
            
//sql = "select count(t.*) as counts from product t "
            
//    +"left join fenlei b on t.lbid=b.lbid "
            
//    +"where b.isuse=0 and b.isdel=0 and t.isdel=0 and t.isuse=0 "
            
//    +"order by adddate desc ";
            ResultSet rs = stmt.executeQuery(sql);
            
if (rs.next()) {
                
return rs.getInt("counts");
            }
 else {
                
return 1;
            }

        }
 catch (Exception e) {
            System.out.println(e.getMessage());
        }

        
return 0;
    }

    
    
public int pageCount(int rscounts,int pagelength){  //取得总页数
        int s;
        
int s1;
        s
=rscounts % pagelength;
        s1
=rscounts / pagelength;
        
if( s==0){
            
return s1;
        }
else{
            
return s1+1;
        }

    }

    
    
public int getcurrpage(String page){  //取当前页   未做纯数字检查,函数我还不知道怎么写,改天补上
        if ("".equals(page) || page==null )//最好加上检测是否是数字的函数
            return 1;
        }
else{
            
return Integer.parseInt(page);
        }

    }

    
public int realPage(String gopage,String currpage,int pagecount){  //取出真实的页数
        int a;
        a
=this.getcurrpage(currpage);
        
        System.out.println(
"a:"+a); //调试用
        System.out.println("gopage:"+gopage);
        System.out.println(
"pagecount:"+pagecount);
        System.out.println(
"===============realPage==================");
        
        
if (gopage==null || "".equals(gopage))//第X页
            return 1;
        }

        
if("next".equals(gopage))//下一页
            if(a+1>=pagecount){
                
                
return pagecount;
            }
else{
                
                
return a+1;
            }

        }

        
if("pre".equals(gopage))//上一页
            if(a-1<=1){
                
                
return 1;
            }
else{
                
                
return a-1;
            }

        }

        
if("first".equals(gopage))//最前页
            
            
return 1;
        }
 
        
if("last".equals(gopage))//最后页
            
            
return pagecount;
        }

        
        
if(Integer.parseInt(gopage)>=pagecount){
            
            
return pagecount;
        }
else{
            
if(Integer.parseInt(gopage)<= 1){
                
return 1;
            }
else{
                
return Integer.parseInt(gopage);
            }

        }

    }

    
    
public String setnav(int currpage,int pagecount){   //设置数字分页导航
        String nav = "";
        
int f,l;
        
if(currpage+4>pagecount){
            l
=pagecount;
        }
else{
            l
=currpage+4;
        }

        
if(currpage-4<1){
            f
=1;
        }
else{
            f
=currpage-4;
        }

        
for(int i=f;i<=l;i++){
            
if(currpage==i){
                nav
+=" ["+i+"";
            }
else{
                nav
+=" <a href="product.do?ac=tb&gopage="+i+"" >"+i+"</a> ";
            }

        }

        
return nav;
    }


}

dao类里使用:
public   void  tbProduct(HttpServletRequest request)  //因为dao还要处理其他事务,所以这里只贴了个dao的函数,写得有点乱,还没时间去整理
        PageDao pagedao=new PageDao();
        
        String sql 
= null;
        String gopage
=request.getParameter("gopage"); //get page data from url 
        String currpage=request.getParameter("currpage"); //get current page from url
        int pagelength=2//每页显示的记录数
        int rscounts; //记录总数
        int pagecount; //总页数
        int realpage; //实际页码
        int tmpa;

        sql 
= "select count (*) as counts from product t "  //as counts 不能丢
                +"left join fenlei b on t.lbid=b.lbid "
                
+"where b.isuse=0 and b.isdel=0 and t.isdel=0 and t.isuse=0 ";
        System.out.println(
"sql1:"+sql);
        rscounts
=pagedao.recordCount(sql);
        pagecount
=pagedao.pageCount(rscounts, pagelength);
        realpage
=pagedao.realPage(gopage, currpage,pagecount);
        
if (realpage==0){
            request.setAttribute(
"currpage"1);
            request.setAttribute(
"numList", pagedao.setnav(1, pagecount));
            tmpa
=1;
        }
else{
            request.setAttribute(
"currpage", realpage);
            request.setAttribute(
"numList", pagedao.setnav(realpage, pagecount));
            tmpa
=pagelength * (realpage-1);
        }


        sql
="select top "+ pagelength +" t.*,b.lbname from product t  "
            
+"left join fenlei b on t.lbid=b.lbid "
            
+" where b.isuse=0 and b.isdel=0 and t.isdel=0 and t.isuse=0 "
            
+"and t.sysid not in (select top "+ tmpa +" t.sysid from product t "
            
+"left join fenlei b on t.lbid=b.lbid "
            
+" where b.isuse=0 and b.isdel=0 and t.isdel=0 and t.isuse=0 )";
        
        System.out.println(
"sql2:"+sql);
        DataConn dc 
= new DataConn();
        Connection conn;
        ArrayList products 
= new ArrayList();
        
try {
            conn 
= dc.getConnection();
            Statement stmt 
= conn.createStatement();
            ResultSet rs 
= stmt.executeQuery(sql);
            
int i = 0;
            
while (rs.next()) {
                ProductForm proform
= new ProductForm();
                
                proform.setSysId(rs.getInt(
"sysid"));  // get data
                proform.setProductId(rs.getString("productId"));
                proform.setProductName(rs.getString(
"productname"));
                proform.setLbId(rs.getInt(
"lbid"));
                proform.setBrand(rs.getString(
"brand"));
                proform.setSpecs(rs.getString(
"specs"));
                proform.setRefPrice(rs.getFloat(
"refprice"));
                proform.setOrigin(rs.getString(
"origin"));
                proform.setIntroduce(rs.getString(
"introduce"));
                proform.setImgPath(rs.getString(
"imgpath"));
                proform.setIsDel(rs.getInt(
"isdel"));
                proform.setIsUse(rs.getInt(
"isuse"));
                proform.setAddDate(rs.getDate(
"addDate"));
                proform.setModifyDate(rs.getDate(
"modifyDate")); 
                proform.setLbName(rs.getString(
"lbname"));
                
                products.add(i, proform);
                
// fenleis.add(fenlei);
                i++;
            }

            request.setAttribute(
"tbProduct", products);  //把取出来的数据放到tbProduct里,在jsp页面里可以用标签直接将里面内容打印出来.
        }
 catch (Exception e) {
            System.out.println(e.getMessage());
        }

        
    }

Action类里只要调用这个函数就可以了...
最后一个,在jsp页面里使用:
< html:form  action ="/product"  method  ="POST"   >
                
<!--  show fenlei list  -->
        
< table  width ="700"  cellpadding ="3"  border ="1"  bgcolor ="#ffffff" >
            
< tr >
                
< th > 产品编号 </ th >
                
< th > 产品名称 </ th >
                
< th > 产品分类 </ th >
                
< th > 品牌 </ th >
                
< th > 产品规格 </ th >
                
< th > 添加时间 </ th >
                
< th > 参考价格 </ th >
                
< th > 操作 </ th >
            
</ tr >
            
< logic:present  name ="tbProduct" >
                
< logic:iterate  name ="tbProduct"  id ="list" >
                
< tr >
                    
< td > &nbsp; < bean:write  name ="list"  property ="productId"   /></ td >
                    
< td > &nbsp;
                    
< style ="cursor:hand; color:#0000FF"  onclick ="javascript:window.open('product.do?ac=showit&sysid=<bean:write name=" list" property ="sysId"   /> ','','resizeable=no,menubar=no,scrollbars=yes,width=500,height=550,left=300,top=100');" >
                        
< bean:write  name ="list"  property ="productName"   />
                    
</ A >
                    
</ td >
                    
< td > &nbsp; < bean:write  name ="list"  property ="lbName"   /></ td >
                    
< td > &nbsp; < bean:write  name ="list"  property ="brand"   /></ td >
                    
< td > &nbsp; < bean:write  name ="list"  property ="specs"   /></ td >
                    
< td > &nbsp; < bean:write  name ="list"  property ="addDate"   /></ td >
                    
< td > &nbsp; < bean:write  name ="list"  property ="refPrice"   /></ td >
                    
< td > &nbsp; < span  style ="color:#0000ff; cursor:hand;"  onClick ="javascript:window.open('product.do?ac=showit&sysid=<bean:write name=" list" property ="sysId"   /> ','','resizeable=no,menubar=no,scrollbars=yes,width=500,height=550,left=300,top=100');">修改 </ span >
                    |
                    
< href ="product.do?ac=delit&sysid=<bean:write name=" list" property ="sysId"   /> " οnclick="return confirm('确定删除?');">删除 </ a ></ td >
                
</ tr >
                
</ logic:iterate >
            
</ logic:present >
        
</ table >
        
< href ="product.do?ac=tb&gopage=first" > 首页 </ a >
        |
        
< href ="product.do?ac=tb&gopage=pre&currpage=<logic:present name=" currpage" >< bean:write  name ="currpage"   /></ logic:present > ">上一页 </ a >
        
< logic:present  name ="numList" >
             ${numList} 
         
</ logic:present >
        
< href ="product.do?ac=tb&gopage=next&currpage=<logic:present name=" currpage" >< bean:write  name ="currpage"   /></ logic:present > ">下一页 </ a >
         |
        
< href ="product.do?ac=tb&gopage=last" > 末页 </ a >
        
<!--  show fenlei list  -->
        
</ html:form >

这里学了点新东西
< logic:present  name ="numList" >
    ${numList}   <!--这里原来用的<bean:write  >bean:write打印出来的是html显示的代码,所以数字分页导航很难做,后面就干脆换成这种形式了,这种方法还是同事教的,HOHO-->
 
</ logic:present >
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
说明:<br>一、含演示数据库建立脚本(较简单)<br>二、使用Struts、Hibernate和display超简单的实现了分页,你不用在页面上再写很多<%%>和很多判断,简单到只需要几行语句:<br><html:form method="post" action="/displayList"><br> <display:table name="lst" cellspacing="0" border="1" cellpadding="0" requestURI="displayList.do" export="true"><br> <display:column property="id" title="编号" /><br> <display:column property="name" title="名字" /><br> <display:column property="age" title="年龄" /><br> </display:table><br> <pag:pagination name="pv" requestUri="displayList.do"></pag:pagination><br></html:form><br>这就是全部语句,不用写任何代码。<br>三、由于使用了display,所以自动实现了Excel | XML | CSV 的导出功能。<br>四、生成页面导航的样式是:<br>[首页/前一页] [后一页/尾页] 显示第1到1条 共3项 每页显示2项 共3页 第1页 GO<br>其中每页显示2项中的项操作人员可以随便改,“第1页”中的页号可以随便改,操作相当的灵活。我看到的样式暂只这一种,我想在display中应可以方便的改变导航样式,不行的话你就去修改display的标签源码,想改成什么样就改成什么样。<br><br>心得:<br>一、今天才明白使用Hibernate还有一个好处,你可以随便改数据库,你可以一会用oracle,一会用sqlserver,一会用mysql,总之你写成的代码换一种数据库,最多就是改一下那几个xml文件,个人感觉这才是java一个地方编写到处运行呢。<br>二、明白了使用标签的好处。<br><br>另提示一点:<br>打开测试用“http://localhost:8080/StrutsHibernateDisplay/displayList.do”,如果直接打开list.jsp会告诉你没有数据的。<br><br>代码是wenlong342的,我只是稍做修改,然后写了上面的说明文字。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值