⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pagerbean.java

📁 JSF分页控件。真正实现了大容量数据可查询的分页。原创。
💻 JAVA
字号:
package com.m2.jsf.pagination;

import java.util.Iterator;
import java.util.List;
import javax.faces.component.UIComponent;
import javax.faces.component.UIData;
import javax.faces.context.FacesContext;
import javax.faces.model.DataModel;


/**
 * 
 * @author http://yuetong.javaeye.com       
 * 
 * 
 */

public abstract class PagerBean {
	
	public static int PAGE_SIZE=50;
    protected DataModel  dataModel=null;   
	
	/**
	 * 返回列表控件的Id
	 * @return String
	 */
	public abstract String getComponentId();
	
	
	
	/**
	 * 留待子类实现,返回分页后的一页数据
	 * 具体实现可以通过拼凑服务器端分页SQL来实现
	 * 如果使用hibernate,则通过构造查询条件来实现
	 * @return
	 */
	public abstract List getDataList(); 
	
	
	/**
	 * 留待子类实现,返回某个查询条件下
	 * 总共的记录数
	 * 
	 * @return
	 */
	public abstract int getDataSetSize(); 
	
	/**
	 * 该函数的作用是重置初始的查询条件,
	 * 并定位到第一页
	 * 
	 */
	protected void reset(javax.faces.event.ActionEvent e){
  	   ((LocalDataModel)dataModel).resetPage(0,PAGE_SIZE);
  	   FacesContext facesContext = FacesContext.getCurrentInstance();
  	   UIComponent c =facesContext.getViewRoot();
  	   UIData data=null;
  	   String id=getComponentId();
       c=findComponent(c,id,facesContext);
  	   if (c!=null){
  		   data=(UIData)c;
  		   data.setFirst(0);
  	   }
    } 
    
    
	 /****
	  * 在上下文环境中递归查找组件
	  * @param component
	  * @param id
	  * @param context
	  * @return
	  */
    protected  UIComponent findComponent(UIComponent component, String id, FacesContext context) {
        String componentId = component.getClientId(context);
 	    if (componentId.equals(id)) return component;
 	    Iterator kids = component.getChildren().iterator();
 	    while (kids.hasNext()) {
 	        UIComponent kid = (UIComponent) kids.next();
 		    UIComponent found = findComponent(kid, id, context);
 		    if (found != null) return found;
 	    }
 	    return null;
 	}     
     
    /**
     * 获取分页
     * @param startRow
     * @param pageSize
     * @return
     */
     
    private  DataPage getDataPage( int startRow,int pageSize){
  	    return new  DataPage(getDataSetSize(), startRow, getDataList());
    } 
   
    public  DataModel getDataModel(){
        if  (dataModel==null ){
            dataModel =new  LocalDataModel(PAGE_SIZE);
        } 
        return  dataModel;
    } 
    /***
     * 
     * 内部类,分页数据的模型
     *
     */
   
    private   class  LocalDataModel extends PagedListDataModel{
        public  LocalDataModel( int  pageSize){
            super (pageSize);
        } 
        public  DataPage fetchPage( int  startRow,  int  pageSize)   {
            return  getDataPage(startRow, pageSize);
        } 
    }         

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -