📄 pagerbean.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 + -