国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

EasyJWeb Tools業務引擎中分頁的設計及實現

2024-07-21 02:14:45
字體:
來源:轉載
供稿:網友
 在web應用開發中,不管是有沒有數據庫,經常要用到分頁處理問題。easyjweb中通過引入ipagelist接口來輕松解決我們的遇到的各種分頁問題,包括對數據庫記錄分頁、文件目錄分頁、數組或者java對象分頁等。

  easyjweb作為一個web框架,其mvc核心中本身沒有包含分頁的內容,我們這里所說的分頁設計是指在easyjweb tools業務引擎中關于分頁需求應用的設計。

  1、應用示例代碼

  首先們看看該分頁設計的有關應用示例代碼,該示例的完整代碼可在http://www.easyjf.com/download.htm中下載!
   
  示例代碼a:com.easyjweb.action.usermanageaction.java

  這是easyjweb文檔中示例3(添刪改查)中有關記錄分頁顯示的部分代碼:
  public class usermanageaction extends abstractcrudaction {
  public ipagelist doquery(webform form, int currentpage, int pagesize) {
   ....

    dbpagelist plist=new dbpagelist(user.class,scope,paras);//通過調用dbpagelist對象,返回分頁結果ipagelist
       plist.dolist(currentpage,pagesize);
       return plist;
  }
  ...

  從代碼中我們可以看出,這是一個對數庫記錄集對象的分頁處理例子。直接通實現了ipagelist接口的dbpagelist類實現數據庫的分頁。


  示例代碼b:net.meybo.mail.action.emailaction.java

  這是meybomail web郵件客戶端開源簡化版中,中對郵件主題進行分頁顯示的代碼。
  public class emailaction implements iwebaction {
...
  private page dolist(webform form, module module,activeuser user)
   {
  ...
  list list=null;
  ...
   list=emailmanage.getmaillist(user.getusername(),user.getserverdomain(),boxname);
  ipagelist plist=new pagelist(new listquery(list));      
     if(plist!=null){
           plist.dolist(pagesize,currentpage,"","");
           form.addresult("list",plist.getresult());
           form.addresult("pages",new integer(plist.getpages()));
           form.addresult("rows",new integer(plist.getrowcount()));
           form.addresult("page",new integer(plist.getcurrentpage()));
           form.addresult("gotopagehtml",commutil.showpagehtml(plist.getcurrentpage(),plist.getpages()));
           }  
  ...

  上面例子中是對一個list集合進行分頁,因為meybomail web中沒有用到數據庫,所以使用listquery查詢處理器進行處理。

   

2、easyjweb tools中業務引擎中有關分頁的接口及類

  easyjweb tools中通過使用ipagelist及iquery兩個接口對分頁問題進行抽象。
  下面是ipagelist接口的全部代碼:
  
    package com.easyjf.web.tools;
   import java.util.collection;
   import java.util.list;
   public interface ipagelist {
   public list getresult();//取回分頁的結果
   public void setquery(iquery q);//設置查詢處理器
   public int getpages();//返回總頁數
   public int getrowcount();//返回總記錄數
   public int getcurrentpage();//返回當前頁
   public void dolist(int pagesize,int pageno,string totalsql,string queryhql);//執行分頁處理
   public void dolist(int pagesize,int pageno,string totalsql,string queryhql,collection paravalues);//執行分頁處理
   }

  在ipagelist中,我們看到通過設置查詢處理器實現數據的查詢及分頁,這里我們在看看iquery接口的內容:

  package com.easyjf.web.tools;
  import java.util.collection;
  import java.util.list;
  public interface iquery {
  int getrows(string conditing);//得到總記錄數
  list getresult(string conditing);//根據條件查詢并返回結果
  void setfirstresult(int begin);//設置開始記錄
  void setmaxresults(int max);//設置每次查詢返回的最大記錄
  void setparavalues(collection paravalues);//設置查詢參數值
  list getresult(string conditing,int begin,int max);//從結果集中begin開始的位置,取max條記錄
  }

  由此可見,我們的ipagelist其實是通過設置調用不同的查詢處理器實現對不同類型數據來進行分頁處理的。 


3、通用分頁處理ipagelist的實現pagelist類
  在easyjweb tools中,我們的pagelist類實現了ipagelist接口,其是一個通用的分頁處理類,其它各種類型數據的分頁可以通過繼承它來實現。

  pagelist.java的全部代碼如下:

  package com.easyjf.web.tools;

import java.util.*;
/**
* 實現通過調用iquery實現分頁處理
* @author 蔡世友
*
*/
public class pagelist  implements ipagelist{
private int rowcount;//記錄數
private int pages;//總頁數    
private int currentpage;//實際頁數
private list result;
private iquery query;
public pagelist()
{
   
}
public pagelist(iquery q)
{
   this.query=q;
}
public void setquery(iquery q)
{
   query=q;
}
public list getresult()
{
   return result;
}

public void dolist(int pagesize, int pageno, string totalsql, string queryhql) {
   list rs=null;        
   int total=query.getrows(totalsql);
   if(total>0){            
   this.rowcount=total;
   this.pages=(this.rowcount + pagesize - 1) / pagesize; //記算總頁數       
   int intpageno=(pageno>this.pages?this.pages:pageno);
   if(intpageno<1)intpageno=1;      
   this.currentpage=intpageno;
   if(pagesize>0){
   query.setfirstresult( (intpageno - 1) * pagesize);       
   query.setmaxresults(pagesize);
   }
   rs=query.getresult(queryhql);       
   }
   result=rs;
}
public void dolist(int pagesize, int pageno, string totalsql, string queryhql,collection paravalues) {
   list rs=null;    
   query.setparavalues(paravalues);
   int total=query.getrows(totalsql);
   if(total>0){            
   this.rowcount=total;
   this.pages=(this.rowcount + pagesize - 1) / pagesize; //記算總頁數       
   int intpageno=(pageno>this.pages?this.pages:pageno);
   if(intpageno<1)intpageno=1;      
   this.currentpage=intpageno;
   if(pagesize>0){
   query.setfirstresult( (intpageno - 1) * pagesize);       
   query.setmaxresults(pagesize);
   }
   rs=query.getresult(queryhql);       
   }
   result=rs;
}
public int getpages() {
   return pages;
}
public int getrowcount() {
   return rowcount;
}
public int getcurrentpage() {
   return currentpage;
}




4、使用hibernate訪問數據庫時的iquery接口實現
  這是easyjf網站后臺中,使用hibernate中間件對數據庫訪問時候,其對應查詢處理器iquery接口的實現。

  dbquery.java的全部代碼:

package com.easyjf.comm;

import java.util.collection;
import java.util.list;

import org.hibernate.query;
import org.hibernate.session;
import com.easyjf.web.tools.iquery;
public class dbquery implements iquery {    
   private session session;        
   private int begin;
   private int max;    
   private list paravalues;
   public dbquery(session session)
   {
       this.session=session;        
   }
   
   public void setparavalues(collection paravalues) {    
       this.paravalues=(list)paravalues;
   //    system.out.println("參數":paravalues.size();)
   }

   public int getrows(string conditing) {
       query query1=session.createquery(conditing);        
       if(paravalues!=null){        
       for(int i=0;i<paravalues.size();i++)
       {            
           query1.setparameter(i,paravalues.get(i));        
           
       }        
       }        
       int total=((integer)query1.uniqueresult()).intvalue();        
       return total;
   }

   public list getresult(string conditing) {        
       query query=session.createquery(conditing);    
       if(paravalues!=null){
           for(int i=0;i<paravalues.size();i++)
           {
               query.setparameter(i,paravalues.get(i));
           }    
           }
       if(begin>0)query.setfirstresult(begin);
       if(max>0)query.setmaxresults(max);
       return query.list();
   }

   public void setfirstresult(int begin) {
       this.begin=begin;
   }

   public void setmaxresults(int max) {
       this.max=max;
   }

   public list getresult(string conditing, int begin, int max) {
       query query=session.createquery(conditing);    
       if(begin>0)query.setfirstresult(begin);
       if(max>0)query.setmaxresults(max);
       return query.list();        
   }
   public void setparavalues(list paravalues) {
   this.paravalues=paravalues;
   }


5、對于list列表數據進行分頁的查詢處理器listquery實現

  當我們要分頁的目標數據不是數據庫記錄,而是其它儲存方式時(如文本、xml或者內存中的實時對象線程等),可以轉化為數組或list等。這時可通過使用listquery查詢處理器實現分頁查詢。

  listquery.java的全部代碼:

package com.easyjf.web.tools;

import java.util.arraylist;
import java.util.collection;
import java.util.list;

public class listquery implements iquery {
private int begin=0;
private int max=0;
private list list=null;
public listquery()
{
    
}
public listquery(list l)
{        
    if(l!=null){
    this.list=l;
    this.max=l.size();
    }
}
public void initlist(list l)
{
    this.list=l;
    this.max=l.size();
}
    public int getrows(string conditing) {
        
        return (list==null?0:list.size());
    }

    public list getresult(string conditing) {        
        return list.sublist(begin,begin+max>list.size()?list.size():begin+max);
    }
    public void setfirstresult(int begin) {        
        this.begin=list.size()<begin?list.size():begin;        
    }
    public void setmaxresults(int max) {
        this.max=max;
    }
    public list getresult(string conditing, int begin, int max) {
        
        return list;
    }    
    public void setparavalues(collection paravalues) {
        // todo auto-generated method stub        
    }
}

6、關于分頁的算法討論
  由于easyjweb tools業務引擎是對眾多分頁需求的簡單抽象。因此,無法對分頁查詢處理器的算法等作具體的限制,上面給出的兩個查詢處理器只是一個簡單的應用實例,大家可以根據實際應用項目中的需求進行查詢處理器的實現及算法設計。
  
  由于水平有限,該設計上有很多不合理的地方,懇請大家指正!


7、easyjweb簡介

  easyjweb是基于java技術,應用于web應用程序快速開發的mvc框架,框架設計構思來源于國內眾多項目實踐,充分借簽了當前主流的開源web框架(struts、jsf、tapestry 、webwork等),吸取了其優點及精華,利用velocity作為模板頁面引擎,是一個實現了頁面及代碼完全分離的mvc開發框架,是一個旨在于為中小型web應用系統提供快速開發實踐的簡易web框架。

  easyjf開源團隊于2006年初才開始建設,因此當前整個開發團隊組建以及所發布的作品,都顯得極不成熟。easyjweb仍然處于測試階段,請廣大的java愛好者多多批評及建議。同進也非常歡迎您能加入到我們的國產開源隊伍中。

  easyjweb官方網址:www.easyjf.com
    easyjf團隊官方網址:www.easyjf.com 注冊會員,創建你的web開發資料庫,
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 舟山市| 丹巴县| 靖远县| 莲花县| 岚皋县| 高邮市| 谷城县| 万源市| 宁城县| 福海县| 云林县| 高台县| 德州市| 宁河县| 婺源县| 昌吉市| 诏安县| 岑巩县| 四平市| 肇庆市| 乡城县| 象山县| 深州市| 克什克腾旗| 周宁县| 邹城市| 龙口市| 饶阳县| 文安县| 保靖县| 浦北县| 洛阳市| 九江市| 洪雅县| 绥化市| 瑞丽市| 房产| 宽城| 敖汉旗| 米泉市| 遂溪县|