strut分页完美解决方案

1 。 开发一个page主类,这里列出完整代码

package com.sap.bctracking.common;

import java.util.*;


public class Page {
 
 public String action ;
 protected  int pageCount ;
 protected  int curpage ;
 protected  List paramName ;
 protected  List paramValue ;
 protected String projectName = Constants.PROJECT_NAME;//指定项目名称,这里因为一个项目名称是固定的,所以用一个常量指定
 protected String form ;
 protected int totalRows ;

 public String getForm() {
  return form;
 }

 public void setForm(String form) { //设定form
  this.form = form;
 }

 public Page(){
  paramName = new ArrayList() ;
  paramValue = new ArrayList() ;}
 
 @SuppressWarnings("unchecked")
 public void setParam(String paramName,String paramValue){//设定分页需保留的查询参数
  this.paramName.add(paramName) ;
  this.paramValue.add(paramValue) ;
 }

 protected boolean isFirst(){//内部函数,判断是否第一页
  if(this.curpage==1) return true ;
  else return false ;
 }
 
 protected boolean isLast(){//内部函数,判断是否最后一页
  if(this.curpage==pageCount) return true ;
  else return false ;
 }
 

protected String generateAction(int page){//生成action,带参数
  String action_ = this.getAction() ;
  String pjN = this.projectName ;
  List pn = this.paramName ;
  List pv = this.paramValue ;
  String paramString = "" ;
  for(int i=0 ;i< (pn==null?0:pn.size()) ;i++){
   String pnS = (String)pn.get(i) ;
   String pvS = (String)pv.get(i) ;
   if(pnS==null||pvS==null||"".equals(pnS)||"".equals(pvS)) continue ;
   if(!paramString.equals(""))
      paramString = paramString +"&"+pnS+"="+pvS ;
   else paramString = pnS+"="+pvS ;
  }
  if("".equals(paramString))
   action_ = "/"+pjN+"/"+action_ + "?curpage="+page ;
  else
   action_ = "/"+pjN+"/"+action_ + "?curpage="+page +"&" + paramString ;
  return action_ ;
 }

//生成action,无参数
 protected String generateAction(){
  String action_ = this.getAction() ;
  String pjN = this.projectName ;
  action_ = "/"+pjN+"/"+action_  ;
  return action_ ;
 }
 
 public String getPageToolBar(){ //得到菜单工具条
  if(pageCount==0){
   return "No note founded!" ;
  }

   StringBuffer ptb = new StringBuffer() ;
   ptb.append("<table>");
   ptb.append("<tr>");
   ptb.append("<td>");
   if(isFirst()){//如果第一页,显示文本

    ptb.append("First &nbsp;&nbsp;" );
    ptb.append("Previous&nbsp;&nbsp; " );
   }else{

    
    ptb.append("<a  style='cursor:hand' οnclick=/"goHSubmitPage('"+this.generateAction(1)+"')/">First</a> &nbsp;&nbsp;" );//产生第一页地链接

    ptb.append("<a  style='cursor:hand' οnclick=/"goHSubmitPage('"+this.generateAction(curpage-1)+"')/">Previous</a> &nbsp;&nbsp;" );//产生前一页地链接curpage-1
   }
         
         if(isLast()){//如果最后一页,显示文本
          ptb.append("Next &nbsp;&nbsp;" );
          ptb.append("Last &nbsp;&nbsp;" );
         }else{

          
          ptb.append("<a style='cursor:hand' οnclick=/"goHSubmitPage('"+this.generateAction(curpage+1)+"')/">Next</a> &nbsp;&nbsp;" );//产生下一页地链接curpage+1
          ptb.append("<a style='cursor:hand' οnclick=/"goHSubmitPage('"+this.generateAction(pageCount)+"')/">Last</a> &nbsp;&nbsp;" );//产生最后一页地链接
         }
         ptb.append(pageCount+"/"+ totalRows);
   ptb.append("</td>");
   ptb.append("<td align='right'>");
  

   ptb.append("<input type='text' size=2 name='curpage' οnblur='if(validatePageForm(this))goSubmitPage(this.value);' value='"+this.getCurpage()+"'/>" );
   ptb.append("</td>");
   ptb.append("</tr>");
   ptb.append("</table>");
   ptb.append(" <script type='text/javascript'>" );
   ptb.append(" function validatePageForm(event){" );
   ptb.append("   var  curpage_ = event.value ;" );
   ptb.append("   var pagecount_ = '"+pageCount+"' ;" );
   ptb.append("   if(isNaN(curpage_)){" );
   ptb.append("      alert('Input must be a number.');") ; //当输入字符不对时,弹出。

   ptb.append("      return false ;") ;
   ptb.append("    }" );

  //当输入的页号不存在时,弹出。
   ptb.append("   if(parseInt(curpage_)>parseInt(pagecount_)||parseInt(curpage_)<=0){" );
   ptb.append("      alert('The page does not exist!') ;") ;

   ptb.append("       return false ;" );
   ptb.append("   }" );
   ptb.append("    return true ;" );
   ptb.append(" }" );
   ptb.append("</script>" );
   //
   ptb.append(" <script type='text/javascript'>" );
   ptb.append(" function goHSubmitPage(action){" );
   ptb.append( "document.all."+form+".action=action" +";") ;
   ptb.append("document.all."+form+".submit()" +";" );
   ptb.append(" }" );
  //-------------- 
   ptb.append(" function goSubmitPage(event){" );

   ptb.append( "document.all."+form+".action='" + this.generateAction() + "?curpage='+event;");
   ptb.append("document.all."+form+".submit()" +";") ;

   ptb.append(" }") ;
   ptb.append("</script>") ;
   return ptb.toString() ;
 }
 
 public void clear(){
  pageCount = 0 ;
  curpage = 0 ;
  paramName.clear() ;
  paramValue.clear() ;
 }

 public String getAction() {
  return action;
 }

 public void setAction(String action) {//设定分页时提交的action
  this.action = action;
 }

 public int getCurpage() {
  return curpage;
 }

 public void setCurpage(int curpage) {//设定当前页
  this.curpage = curpage;
 }


 public int getPageCount() {
  return pageCount;
 }

 public void setPageCount(int pageCount) {//设定总页数,根据传进来的总行数
  totalRows = pageCount ;
  int pageSize = Constants.PAGE_SIZE ; //从外部得到每页大小(显示行数,可以通过改变PAGE_SIZE 设定)
  int a = pageCount%pageSize ;
  if(a==0)this.pageCount = pageCount/pageSize;
  else this.pageCount = pageCount/pageSize+1;
 }
}

这里分页主类完成了,当然显示风格可以在 getPageToolBar(){ 改动

2。 在action里面调用

  page.setPageCount(pageCount) ; //设定总纪录数
  page.setCurpage(i_curpage) ; //设定当前页,通过"?curpage="+page ;
方式传到了页面
  page.setAction("a1sPvt_queryPage.do") ;//设定action
  page.setForm("a1sPvtForm") ; //设定form
  

//设定参数
  page.setParam("id",id) ;
  page.setParam("techName",techname) ;
  page.setParam("description",description) ;
  page.setParam("contentType",contenttype) ;
  page.setParam("path1",path1);
  page.setParam("path2",path2);
  page.setParam("path3",path3);
  page.setParam("path4",path4);
  page.setParam("path5",path5);

//得到工具条
  String toolBar = page.getPageToolBar() ;
  
  request.setAttribute("toolBar",toolBar) ;

3.jsp中调用

${toolBar}即可


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值