struts2 分页

今天看到某人写的分页类,结果发现批人家的人不少,没有必要,好的东西吸收学习,感觉不实用可以不用,何必发帖子挖苦人家。我前段时间也自己设计了一个分页的方法,绝对是自己想到的,如果网上有一样的,说明大家都思考了,有可取度,提供给大家参考。
首先写了一个分页的类,其实只有主要属性的setter和getter方法
/**
* 分页类
* @author qinglin876
*
*/
public class Pagination {
private int start;
//一次取得的数量
private int size;
//要取得页数
private int currentPage = 1;
//总的记录页数
private int totalPage = 0;
//总的记录条数
private int totalRecord;
public int getTotalRecord() {
return totalRecord;
}
public void setTotalRecord(int totalRecord) {
this.totalRecord = totalRecord;
}
public Pagination(){

}
public Pagination(int size){
this.size = size;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public int getStart() {
return start;
}
public void setStart(int start) {
this.start = start;
}
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public int getTotalPage() {
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}

}

另外pagination.jsp由pagination类填充

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<%@ taglib prefix="s" uri="/struts-tags"%>








value="pagination.currentPage+1">



value="pagination.currentPage-1">





首页
上一页


首页
上一页

test="pagination.currentPage == pagination.totalPage || pagination.totalPage == 0">
下一页
末页


下一页  
末页

跳转到
cssStyle="display:inline">

οnblur="selectPage(this)" />



value="pagination.totalRecord" />条
当前是第 value="pagination.currentPage" />/






用的时候,在页面include进去,注意上面的"%{#request.url}",即是在struts2的action里面有一个setter和getter方法,下面看action中的某个方法
public String showNotices() throws Exception{

if(tip != null){
tip = new String(tip.getBytes("iso8859-1"),"utf-8");
}
if(notices == null)
this.notices = new ArrayList();
int size = Integer.valueOf(this.getText("per_page_notice_size"));
if (pagination == null) {
pagination = new Pagination(size);
}
pagination.setSize(size);
if (pagination.getCurrentPage() <= 0) {
pagination.setCurrentPage(1);
}
if (pagination.getTotalPage() != 0
&& pagination.getCurrentPage() > pagination.getTotalPage()) {
pagination.setCurrentPage(pagination.getTotalPage());
}
[color=red]url = "goto_showNotices.action"[/color]; this.notices.addAll(this.noticeDAO.showAll(pagination));
if(this.notices.size() == 0 && pagination.getCurrentPage() != 1){
pagination.setCurrentPage(pagination.getCurrentPage()-1);
this.notices.addAll(this.noticeDAO.showAll(pagination));
}
return "success";
}

在上面的this.noticeDAO.showAll(pagination))中填充pagination,具体如下
/*
* 显示所有的通告
* @see com.qinglin.dao.NoticeDAO#showAll(com.qinglin.util.Pagination)
*/
@SuppressWarnings("unchecked")
public List showAll(final Pagination pagination) {
String hql = "from Notice as n";
this.getHibernateTemplate().setCacheQueries(true);
int totalRecord = ((Long) this.getSession().createQuery(
"select count(*) " + hql).uniqueResult()).intValue();
int totalPage = totalRecord % pagination.getSize() == 0 ? totalRecord
/ pagination.getSize() : totalRecord / pagination.getSize() + 1;
pagination.setTotalRecord(totalRecord);
pagination.setTotalPage(totalPage);
hql += " order by n.add_date desc";
final String hql1 = hql;

return (List) this.getHibernateTemplate().execute(
new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query query = session.createQuery(hql1);
query.setFirstResult((pagination.getCurrentPage() - 1)
* pagination.getSize());
query.setMaxResults(pagination.getSize());
return query.list();
}
});
}


基本上就这些,当然请求的action里面需要设置pagination的setter和getter方法
这个分页方法特点是简单,只需在action中指明请求的url,用某种方法填充pagination,在显示的页面包含pagination.jsp即可。

你可能感兴趣的:(JSP,Struts,DAO)