原文地址:http://yangchao20020.blog.163.com/blog/static/4838224720106844427282/
一、hibernate部分
Java代码
package com.ada.dao.impl;
import org.hibernate.Criteria;
import org.hibernate.criterion.Projections;
import com.ada.bean.Page;
public class MyDAOSupport {
/** 分页查询方法
* ada 2010-6-28
* @param cri:查询条件对象
* @param page:分页对象
* @return page:分页对象
*/
protected Page getQueryPage(Criteria cri,Page page){
int count = ((Long)cri.setProjection(Projections.rowCount()).uniqueResult()).intValue();
cri.setProjection(null);
page.setSumcount(count);//总记录数
int pagenum=count/page.getPagesize();
if(count%page.getPagesize()!=0)
pagenum+=1;
page.setPagecount(pagenum);//总页数
int startNo=(page.getCurpage()-1)*page.getPagesize();
int endNo=startNo+page.getPagesize();
cri.setFirstResult(startNo);
cri.setMaxResults(endNo);
page.setResult(cri.list());
return page;
}
}
调用例子:
Java代码
package com.ada.dao.impl;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import com.ada.bean.Page;
import com.ada.bean.User;
import com.ada.dao.UserDAO;
import com.ada.util.HibernateUtil;
public class UserDAOImpl extends MyDAOSupport implements UserDAO {
public Page queryUserPages(Page page) {
Session s=null;
try{
s=HibernateUtil.getSession();
Criteria cri = s.createCriteria(User.class);
return getQueryPage(cri,page);
}finally{
if(s!=null)
s.close();
}
}
public Page queryUserPagesByDeptid(String deptid,Page page){
Session s=null;
try{
s=HibernateUtil.getSession();
Criteria cri = s.createCriteria(User.class);
cri.add(Restrictions.eq("deptid",Long.valueOf(deptid)));
return getQueryPage(cri,page);
}finally{
if(s!=null)
s.close();
}
}
}
分页对象
Java代码
package com.ada.bean;
import java.util.List;
public class Page {
private int pagesize;//每页显示个数
private int curpage;//当前页
private int pagecount;//总页数
private int sumcount;//总记录数
private List result;
public int getSumcount() {
return sumcount;
}
public void setSumcount(int sumcount) {
this.sumcount = sumcount;
}
public int getPagecount() {
return pagecount;
}
public void setPagecount(int pagecount) {
this.pagecount = pagecount;
}
public int getCurpage() {
return curpage;
}
public void setCurpage(int curpage) {
this.curpage = curpage;
}
public int getPagesize() {
return pagesize;
}
public void setPagesize(int pagesize) {
this.pagesize = pagesize;
}
public List getResult() {
return result;
}
public void setResult(List result) {
this.result = result;
}
}
二、struts部分
显示效果:
Struts2.0 +Hibernate 分页 - K.Y.Chill - 没 有 不 可 能
包含3个文件:
1.PageTag.java
Java代码
package com.adaq.tag;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.components.Component;
import org.apache.struts2.views.jsp.ComponentTagSupport;
import com.opensymphony.xwork2.util.ValueStack;
/** 自定义分页标签
* @author Ada
*/
public class PageTag extends ComponentTagSupport {
//private static final long serialVersionUID = 7242423813230124088L;
//这里传递的参数需要用字符串的形式
private String pageNo; //当前页数
private String total; //总记录数
private String pagesize;//每页显示个数
private String pagecount;//页数
private String pageaction;
public void setPageNo(String pageNo) {
this.pageNo = pageNo;
}
public void setTotal(String total) {
this.total = total;
}
@Override
public Component getBean(ValueStack arg0, HttpServletRequest arg1,
HttpServletResponse arg2) {
return new Pages(arg0);
}
protected void populateParams() {
super.populateParams();
Pages pages = (Pages) component;
pages.setPageNo(pageNo);
pages.setTotal(total);
pages.setPagecount(pagecount);
pages.setPagesize(pagesize);
pages.setPageaction(pageaction);
}
public String getPagesize() {
return pagesize;
}
public void setPagesize(String pagesize) {
this.pagesize = pagesize;
}
public String getPagecount() {
return pagecount;
}
public void setPagecount(String pagecount) {
this.pagecount = pagecount;
}
public String getPageaction() {
return pageaction;
}
public void setPageaction(String pageaction) {
this.pageaction = pageaction;
}
}
2.Pages.java
Java代码
package com.adaq.tag;
import java.io.IOException;
import java.io.Writer;
import java.util.Map;
import org.apache.struts2.StrutsStatics;
import org.apache.struts2.components.Component;
import org.apache.struts2.dispatcher.StrutsRequestWrapper;
import com.opensymphony.xwork2.util.ValueStack;
/** 自定义分页标签
* @author Ada
*/
public class Pages extends Component {
private String pageNo; //当前页数
private String total; //总记录数
private String pagesize;//每页显示个数
private String pagecount;//页数
private String pageaction;
public String getPageaction() {
return pageaction;
}
public void setPageaction(String pageaction) {
this.pageaction = pageaction;
}
public String getPageNo() {
return pageNo;
}
public void setPageNo(String pageNo) {
this.pageNo = pageNo;
}
public String getTotal() {
return total;
}
public void setTotal(String total) {
this.total = total;
}
public Pages(ValueStack arg0) {
super(arg0);
}
@Override
public boolean start(Writer writer) {
boolean result = super.start(writer);
StringBuilder str = new StringBuilder();
Map<String, Object> cont = stack.getContext();
StrutsRequestWrapper req = (StrutsRequestWrapper) cont
.get(StrutsStatics.HTTP_REQUEST);
// 从ValueStack中取出数值
Object obj = stack.findValue(pageNo);
pageNo = String.valueOf(obj);
obj = stack.findValue(total);
total = String.valueOf(obj);
obj = stack.findValue(pagesize);
pagesize = String.valueOf(obj);
obj = stack.findValue(pagecount);
pagecount = String.valueOf(obj);
//用于计算的当前页整数形式
int cpageInt = Integer.valueOf(pageNo);
str.append("<div class='pagination'>");
Integer totalInt = Integer.valueOf(total);
Integer pagesizeInt = Integer.valueOf(pagesize);
Integer pagecountInt = Integer.valueOf(pagecount);
//分页状态显示
if(totalInt==0){
str.append("<span class='current'>共" +totalInt+
"条记录 每页显示" +pagesize+
"条 共" +pagecount+
"页 </span> ");
}else{
str.append("<span class='current'>共" +totalInt+
"条记录 每页显示" +pagesize+
"条 第" +cpageInt+
"页/共" +pagecount+
"页 </span> ");
}
if(totalInt == 1 || totalInt == 0){
str.append("<span class='disabled'>首页 上一页 下一页 末页</span>");
}else{
if(cpageInt==1){
str.append("<span class='disabled'>首页 上一页 </span>");
}else{
str.append("<a href='");
str.append(pageaction);
str.append("?page.curpage=1");
str.append("'>首页</a> ");
str.append("<a href='");
str.append(pageaction);
str.append("?page.curpage=");
str.append(cpageInt - 1);
str.append("'>上一页</a> ");
}
if(cpageInt==pagecountInt){
str.append("<span class='disabled'>下一页 末页</span>");
}else{
str.append("<a href='");
str.append(pageaction);
str.append("?page.curpage=");
str.append(cpageInt + 1);
str.append("'>下一页</a> ");
str.append("<a href='");
str.append(pageaction);
str.append("?page.curpage=");
str.append(pagecountInt);
str.append("'>末页</a>");
}
}
str.append("</div>");
try {
writer.write(str.toString());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
public String getPagesize() {
return pagesize;
}
public void setPagesize(String pagesize) {
this.pagesize = pagesize;
}
public String getPagecount() {
return pagecount;
}
public void setPagecount(String pagecount) {
this.pagecount = pagecount;
}
}
3.page.tld
Xml代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
<tlib-version>2.2.3</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>p</short-name>
<uri>/p</uri>
<display-name>"pages Tags"</display-name>
<tag>
<name>pages</name>
<tag-class>com.adaq.tag.PageTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>pageNo</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>total</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>pagesize</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>pagecount</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>pageaction</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
调用例子:
Html代码
<%@ taglib prefix="p" uri="/WEB-INF/page.tld"%>
...
<p:pages pageNo="page.curpage" pagesize="page.pagesize" pagecount="page.pagecount" total="page.sumcount" pageaction="flowAction!page"/>
其中:
pageNo:当前页数
pagesize:每页显示记录数
pagecount:总页数
total:总记录数
pageaction:分页查询action
Struts2.0 +Hibernate 分页
最新推荐文章于 2024-08-25 21:18:14 发布