1.PageBean
package com.aptch.jb.util;
import java.util.List;
@SuppressWarnings("unchecked")
public class PageBean {
public PageBean() {
init();
}
private List list;// 要返回的某一页的记录列表
private int allRow; // 总记录数
private int totalPage;// 总页数
private int currentPage;// 当前页
private int pageSize=10;// 每页记录数
@SuppressWarnings("unused")
private boolean isFirstPage;// 是否为第一页
@SuppressWarnings("unused")
private boolean isLastPage;// 是否为最后一页
@SuppressWarnings("unused")
private boolean hasPreviousPage;// 是否有前一页
@SuppressWarnings("unused")
private boolean hasNextPage;// 是否有下一页
private int startPage;// 起始页
private int endPage;// 结束页
public int getEndPage() {
return endPage;
}
public void setEndPage(int endPage) {
this.endPage = endPage;
}
public int getStartPage() {
return startPage;
}
public void setStartPage(int startPage) {
this.startPage = startPage;
}
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
public int getAllRow() {
return allRow;
}
public void setAllRow(int allRow) {
this.allRow = allRow;
}
/**
* 分页机制。我贴出的代码是我仿百度的分页机制。页面显示10个页码,每页显示5条数据。至于这个机制,自己研究一下就很容易懂得。大体意思就是,当前页总位于中间位置,显示页数是10
* 分页方法
* 通过这个方法,得到两个数据——startPage和endPage
* 页面上的页码就是根据这两个数据处理后显示
* @param nowPage当前页
* @param totalPage总页数
*/
public void paginationTool(int nowPage, int totalPage) {
this.currentPage = nowPage;
this.totalPage = totalPage;
/**
* 计算startPage与endPage的值
*
*/
if (this.totalPage < pageSize) {
/** if中是总页数小于SHOWPAGES的情况 */
this.startPage = 1;
this.endPage = totalPage;
} else {
/** else中是总页数大于SHOWPAGES的情况 */
if (this.currentPage <= pageSize / 2 + 1) {
this.startPage = 1;
this.endPage = pageSize;
} else {
this.startPage = this.currentPage - (pageSize / 2);
this.endPage = this.currentPage + (pageSize / 2 - 1);
if (this.endPage >= this.totalPage) {
this.endPage = this.totalPage;
this.startPage = this.totalPage - pageSize + 1;
}
}
}
}
//得到一共多少页
public int getTotalPage() {
totalPage=this.countTotalPage(pageSize,allRow);
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
/**
* 初始化分页信息
*/
public void init() {
this.isFirstPage = isFirstPage();
this.isLastPage = isLastPage();
this.hasPreviousPage = isHasPreviousPage();
this.hasNextPage = isHasNextPage();
}
/**
* 以下判断页的信息,只需getter方法(is方法)即可
*/
public boolean isFirstPage() {
return currentPage == 1;// 如是当前页是第1页
}
public boolean isLastPage() {
return currentPage == totalPage;// 如果当前页是最后一页
}
public boolean isHasPreviousPage() {
return currentPage != 1;// 只要当前页不是第1页
}
public boolean isHasNextPage() {
return currentPage != totalPage;// 只要当前页不是最后1页
}
/** */
/**
* 计算总页数,静态方法,供外部直接通过类名调用
*
* @param pageSize
* 每页记录数
* @param allRow
* 总记录数
* @return 总页数
*/
public int countTotalPage(final int pageSize, final int allRow) {
int totalPage = allRow % pageSize == 0 ? allRow / pageSize : allRow
/ pageSize + 1;
return totalPage;
}
/** */
/**
* 计算当前页开始记录
*
* @param pageSize
* 每页记录数
* @param currentPage
* 当前第几页
* @return 当前页开始记录号
*/
public static int countOffset(final int pageSize, final int currentPage) {
final int offset = pageSize * (currentPage - 1);
return offset;
}
/**
* 计算当前页,若为0或者请求的URL中没有"?page=",则用1代替
*
* @param page 传入的参数(可能为空,即0,则返回1)
* @return 当前页
*/
public static int countCurrentPage(int page) {
final int curPage = (page == 0 ? 1 : page);
return curPage;
}
public static int countTotalGroup(int totalPage) {
int totalGroup = totalPage % 5 == 0 ? totalPage / 5 : totalPage / 5 + 1;
return totalGroup;
}
public void setHasNextPage(boolean hasNextPage) {
this.hasNextPage = hasNextPage;
}
public void setHasPreviousPage(boolean hasPreviousPage) {
this.hasPreviousPage = hasPreviousPage;
}
public void setFirstPage(boolean isFirstPage) {
this.isFirstPage = isFirstPage;
}
public void setLastPage(boolean isLastPage) {
this.isLastPage = isLastPage;
}
public static void main(String[] args) {
PageBean p = new PageBean();
p.paginationTool(7, 144);
System.out.println(p.getStartPage());
System.out.println(p.getEndPage());
}
}
2.dao
public PageBean getSearchClaim(final int pageNo,final int pageSize ,final ClaimVoucher claimVoucher, final Employee emp){
return (PageBean)super.getHibernateTemplate().execute(new HibernateCallback(){
public Object doInHibernate(Session session) throws HibernateException, SQLException {
PageBean pageBean = new PageBean();
String hql = "from ClaimVoucher c inner join fetch c.employeeByCreateSn where 1=1";
Query query = session.createQuery(hql);
// if(claimVoucher!=null && emp!=null){
// hql +=" and cemployeeByCreateSn.name=? order by c.status asc c.createTime desc";
// query.setString(0, emp.getName());
// }
query.setFirstResult((pageNo - 1) * pageSize);
query.setMaxResults(pageSize);
List list = query.list();
pageBean.setList(list);
//每页几条数据,默认10条
pageBean.setPageSize(pageSize);
//得到数据库中的条数
pageBean.setAllRow(getCount());
//当前第几页,默认第一页
pageBean.setCurrentPage(pageNo);
//得到一共几页
pageBean.setTotalPage(pageBean.getTotalPage());
//模仿百度分页,只显示10条数据
pageBean.paginationTool(pageNo, pageBean.getTotalPage());
return pageBean;
}
});
}
3.action
public String toListClaim() {
List empList = (List) ActionContext.getContext().getSession().get(
"employee");
HttpServletRequest request = ServletActionContext.getRequest();
String pageNo = request.getParameter("pageNo");
int currentPage = 1;
if(pageNo!=null){
currentPage=Integer.parseInt(pageNo);
}
System.out.println(pageNo);
if (empList.size() != 0) {
Employee emp = (Employee) empList.get(0);
claimVoucher.setEmployeeByCreateSn(emp);
PageBean pagelist = claimVoucherBiz.getSearchClaim(currentPage, 10, claimVoucher, emp);
request.setAttribute("claim", pagelist);
request.setAttribute("currentPage", currentPage);
return SUCCESS;
} else {
return ERROR;
}
}
4.xml
<package name="cla" extends="struts-default" >
<action name="cla" class="com.atpech.jb.web.action.ClaimVoucherAction">
<result name="success" >/showClaim.jsp</result>
<result name="successDetail">cla!toListClaim.action</result>
<result name="error">/error.jsp</result>
</action>
</package>
5.jsp
<sx:div id="info" >
<table width="603" height="67" border="0" cellpadding="0" cellspacing="0">
<tr>
<td>n编号<br></td>
<td>填报日期</td>
<td>填报人</td>
<td>总金额</td>
<td>状态</td>
<td>操作</td>
</tr>
<c:forEach var="item" items="${claim.list}">
<tr>
<td> ${item.id}</td>
<td> ${item.createTime}</td>
<td> ${item.employeeByCreateSn.name} </td>
<td>${item.totalAccount}</td>
<td>${item.status}</td>
<td> </td>
</tr>
</c:forEach>
</table>
<sx:a href="cla!toListClaim.action?pageNo=1" targets="info">[首页]</sx:a>
<c:if test="${claim.hasPreviousPage }">
<s:set name="pre" value="#attr.currentPage-1"></s:set>
<sx:a href="cla!toListClaim.action?pageNo=%{#pre}" targets="info">[上一页]</sx:a>
</c:if>
<c:forEach var="index" begin="${claim.startPage}" end="${claim.endPage}" step="1">
<s:set name="i" value="#attr.index"></s:set>
<sx:a href="cla!toListClaim.action?pageNo=%{#i}" targets="info">${index}</sx:a>
</c:forEach>
<c:if test="${claim.hasNextPage}">
<s:set name="next" value="#attr.currentPage+1"></s:set>
<sx:a href="cla!toListClaim.action?pageNo=%{#next}" targets="info">[下一页]</sx:a>
</c:if>
<s:set name="end" value="#attr.claim.totalPage"></s:set>
<sx:a href="cla!toListClaim.action?pageNo=%{#end}" targets="info">[末页]</sx:a>
</sx:div>
</body>