自己写个分页,用起来挺爽
PageBean类: 封装一切页面元素及结果集,保存在Session里,省略了一切能省略的setter getter
package com.yls.car.bean.car;
//通用Hibernate分页类
import java.util.*;
import org.hibernate.Session;
import org.hibernate.Query;
import org.hibernate.HibernateException;
import org.apache.struts.util.LabelValueBean;
public class PageBean {
private int currentPage = 0; //当前页
private int totalPages = 0; //总页数
private int pageRecords = 0; //每页显示记录数
private int totalRecords = 0; //总记录数
private int startRecord = 0; //当前页的第1条记录在数据库中的起始行
private boolean hasNextPage = false; //是否有下一页
private boolean hasPreviousPage = false; //是否有上一页
private List resultList = null; //返回的分页结果集
private Query query = null;
private ArrayList pages = new ArrayList(); //对应页面的html:select框
private int selectPage = 0; //对应页面所选的页面
public PageBean() {
}
public PageBean(String hql,Session session,int _pageRecords) throws HibernateException {
//第一次分页,给类属性赋值
query = session.createQuery(hql);
currentPage = 1;
pageRecords = _pageRecords;
totalRecords = query.list().size();
if (totalRecords % pageRecords == 0) {
totalPages = totalRecords/pageRecords;
} else {
totalPages = totalRecords/pageRecords + 1;
}
startRecord = 0;
setHasPreviousPage();
setHasNextPage();
setPages();
dividePage();
}
//分页并将结果集做为PageBean一个属性
public void dividePage() throws HibernateException {
query.setFirstResult(startRecord);
query.setMaxResults(pageRecords);
resultList = query.list();
}
//判断动作
public void judgeAction(String action) {
if (action.equals("firstPage")) {
currentPage = 1;
startRecord = 0;
setHasPreviousPage();
setHasNextPage();
dividePage();
} else if (action.equals("previousPage") && currentPage-1>0) {
currentPage = currentPage-1;
setStartRecord();
setHasPreviousPage();
setHasNextPage();
dividePage();
} else if (action.equals("nextPage") && currentPage<totalPages) {
currentPage = currentPage+1;
setStartRecord();
setHasPreviousPage();
setHasNextPage();
dividePage();
} else if (action.equals("lastPage")) {
currentPage = totalPages;
setStartRecord();
setHasPreviousPage();
setHasNextPage();
dividePage();
} else if (isNumber(action)) {
currentPage = Integer.parseInt(action);
setStartRecord();
setHasPreviousPage();
setHasNextPage();
dividePage();
}
}
//判断是否是数字
public boolean isNumber(String number) {
try {
Integer.parseInt(number);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
//返回当前页
public int getCurrentPage() {
return currentPage;
}
//获得是否有下页,用于页面是否显示"下一页"
public boolean isHasNextPage() {
return hasNextPage;
}
//设置是否有下页
private void setHasNextPage() {
if (currentPage < totalPages) {
hasNextPage = true;
} else {
hasNextPage = false;
}
}
//获得是否有上页,用于页面是否显示"上一页"
public boolean isHasPreviousPage() {
return hasPreviousPage;
}
//设置是否有上页
private void setHasPreviousPage() {
if (currentPage-1 > 0) {
hasPreviousPage = true;
} else {
hasPreviousPage = false;
}
}
//设置从哪行取记录
public void setStartRecord() {
startRecord = (currentPage-1)*pageRecords;
}
//获得总页数
public int getTotalPages() {
return totalPages;
}
//返回结果集给页面的迭代器
public List getResultList() {
return resultList;
}
//返回集合给html:optionsCollection
public ArrayList getPages() {
return pages;
}
//设置页面下拉框的集合
public void setPages() {
for(int i=0;i<totalPages;i++) {
pages.add(new LabelValueBean(String.valueOf(i+1),String.valueOf(i+1)));
}
}
//获取所选的页面
public int getSelectPage() {
return selectPage;
}
}
Action中调用(只需传入3个参数hibernate中的session,HQL,还有每页分多少行数据,一切搞定)
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
Session ss = null;
HttpSession session = null;
PageBean page = null;
try {
ss = HibernateSessionFactory.getSession();
session = request.getSession();
String action = request.getParameter("action");
String selectPage = request.getParameter("selectPage");
if (action == null && selectPage == null) {
page = new PageBean("FROM YcAccident", ss, 10);
page.dividePage();
session.setAttribute("page", page);
} else {
if (session.getAttribute("page") != null && action != null) {
page = (PageBean) session.getAttribute("page");
page.judgeAction(action);
} else if (session.getAttribute("page") != null
&& selectPage != null) {
page = (PageBean) session.getAttribute("page");
page.judgeAction(selectPage);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return mapping.findForward("querySuccess");
}
页面显示
<table border="1">
<tr>
<td>流水号</td>
<td>类型</td>
<td>我方车牌号</td>
<td>我方驾驶者</td>
<td>对方车牌号</td>
<td>对方驾驶者</td>
<td>发生时间</td>
<td>发生地点</td>
<td>处理交警</td>
<td align="center">操作</td>
</tr>
<logic:iterate name="page" property="list" id="YcAccident"
type="com.yls.car.bean.hibernate.YcAccident">
<tr>
<td><bean:write name="YcAccident" property="aid" /></td>
<td><bean:write name="YcAccident" property="type" /></td>
<td><bean:write name="YcAccident" property="myCarSign" /></td>
<td><bean:write name="YcAccident" property="myDriver" /></td>
<td><bean:write name="YcAccident" property="oppCarSign" /></td>
<td><bean:write name="YcAccident" property="oppDriver" /></td>
<td><bean:write name="YcAccident" property="occurTime" /></td>
<td><bean:write name="YcAccident" property="occurAddress" /></td>
<td><bean:write name="YcAccident" property="disposer" /></td>
<td>
<input type="submit" value="删除" onClick="del(<bean:write name="YcAccident" property="aid" />)">
<input type="button" value="详细" onClick="modify('<bean:write name="YcAccident" property="aid" />',
'<bean:write name="YcAccident" property="type" />',
'<bean:write name="YcAccident" property="myCarSign" />',
'<bean:write name="YcAccident" property="myDriver" />',
'<bean:write name="YcAccident" property="oppCarSign" />',
'<bean:write name="YcAccident" property="oppDriver" />',
'<bean:write name="YcAccident" property="oppCarModel" />',
'<bean:write name="YcAccident" property="oppOrg" />',
'<bean:write name="YcAccident" property="occurTime" />',
'<bean:write name="YcAccident" property="occurAddress" />',
'<bean:write name="YcAccident" property="disposeDepart" />',
'<bean:write name="YcAccident" property="disposer" />',
'<bean:write name="YcAccident" property="scene" />',
'<bean:write name="YcAccident" property="damnify" />',
'<bean:write name="YcAccident" property="disposeResult" />',
'<bean:write name="YcAccident" property="myResponsibility" />',
'<bean:write name="YcAccident" property="punishAmount" />',
'<bean:write name="YcAccident" property="myAmount" />',
'<bean:write name="YcAccident" property="oppAmount" />',
'<bean:write name="YcAccident" property="insuranceAmount" />')">
</td>
</tr>
</logic:iterate>
<tr>
<td align="right" colspan="10">
<logic:equal name="page" property="hasPreviousPage" value="true">
<html:link page="/showAccident.do?action=previousPage">上一页</html:link>
</logic:equal>
<logic:equal name="page" property="hasNextPage" value="true">
<html:link page="/showAccident.do?action=nextPage">下一页</html:link>
</logic:equal>
总页数:<bean:write name="page" property="totalPages" />
当前页:<bean:write name="page" property="currentPage" />
跳转到:<html:select name="page" property="selectPage" onchange="pageNumber(this)">//这里获得页码,提交到Action
<html:optionsCollection name="page" property="pages" label="label" value="value"/>
</html:select>
</td>
</tr>
</table>
效果图:
|