一:抽象类:
/**
*
*/
package cn.cjp.utility;
import javax.persistence.EntityManager;
import javax.faces.model.SelectItem;
import org.jboss.seam.contexts.Contexts;
import org.jboss.seam.Component;
/**
* @author rmc
*
*/
public abstract class PageABT{
EntityManager em = (EntityManager) Component.getInstance("entityManager");
//分页开始
protected int lines = 10;
protected int pages = 0;
long entrys = Contexts.getPageContext().get("entrys")==null?0:Contexts.getPageContext().get("entrys");
protected List<SelectItem> pageselectitem = Contexts.getPageContext().get("pageselectitem");
/**
* 重置分页
*/
protected void resetpage(){
Contexts.getPageContext().remove("entrys");
entrys=-1;
Contexts.getPageContext().remove("pageselectitem");
pageselectitem=null;
setPage(0);
}
/**
* 保存查询合计
* @param query 例子:" from Send s where s.status=-1 "
*/
protected saveentrys(String query){
Integer result=Contexts.getPageContext().get("entrys");
if(result==null||entrys==-1){
entrys=em.createQuery("select count(s)"+query).getSingleResult();
Contexts.getPageContext().set("entrys",entrys);
}
}
public List<SelectItem> Pages() {
if(pageselectitem!=null)
{
return pageselectitem;
}else{
pageselectitem=new LinkedList<SelectItem>();
pages = (int) (entrys / lines + 1);
for ( i in 0..< pages) {
pageselectitem.add(new SelectItem(i, "第" +(1+ i) + "页"));
}
Contexts.getPageContext().set("pageselectitem",pageselectitem);
return pageselectitem;
}
}
protected Integer page=Contexts.getPageContext().get("page")==null?0:(Integer)Contexts.getPageContext().get("page");
public Integer getPage(){
return page;
}
public void setPage(Integer page){//for selectitem
this.page=page;
Contexts.getPageContext().set("page", page);
}
public void setpage(int opr){//for button > and < set page
page=getPage();
List<SelectItem> result = Contexts.getPageContext().get("pageselectitem");
int maxpage = result.size() - 1;
if (opr != 0) {
page = ((page + opr) >= 0) ? (page + opr) : page;
page = (page > maxpage) ? maxpage : page;
setPage(page);
}
}
//分页结束
}
二:使用
@Name("sendmng")
public Test extends PageABT{
public void rest(){
resetpage();
}
@DataModel("sendlist")
private List<Send> sendlist;
@DataModelSelection("sendlist")
private Send s;
@Factory("sendlist")
public void listinit(){
query=" from Send s where s.status=1 "
saveentrys(query);
list=em.createQuery("select s"+query+"order by s.id desc").setFirstResult(page*lines).setMaxResults(lines).getResultList();
}
}
xhtml:
<h:form> <h:panelGrid columns="4" id="som"> <a:commandButton value="<" action="#{sendmng.setpage(-1)}" reRender="som,sendlist" /> <h:selectOneMenu value="#{sendmng.page}"> <f:selectItems value="#{sendmng.Pages()}" /> <a:support event="onchange" action="#{sendmng.setpage(0)}" reRender="som,sendlist" /> </h:selectOneMenu> <a:commandButton value=">" action="#{sendmng.setpage(1)}" reRender="som,sendlist" /> <h:outputText style="color:blue" value="共计#{sendmng.entrys}个" /> </h:panelGrid> </h:form>