一:抽象类:
/**
*
*/
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>
本文介绍了一个用于实现分页功能的抽象类PageABT的设计方案,该类支持重置分页状态、保存查询总计数、获取分页选择项等功能,并通过示例展示了如何在具体业务类中继承并应用此抽象类。
168

被折叠的 条评论
为什么被折叠?



