/**
* 分页实体类
* @author: 张荣
* @date: 2016年3月22日
*/
public class Pagination implements Serializable {
private static final long serialVersionUID = 1L;
// 起始页号
private Integer pageNo;
// 每页记录数目
private Integer pageSize;
// 总的记录条数
private Integer totalSize;
// 设置下方页面跳转的参数
private PageView pageView = new PageView();
// 设置每一页的点击链接
private List<String> page = new ArrayList<String>();
private List<?> list = new ArrayList<>();
/** 部分get和set方法省略 */
public Pagination(Integer pageNo, Integer pageSize, Integer totalSiz1e) {
super();
this.setStartRow(pageNo);
this.pageSize = pageSize;
this.totalSize = totalSize;
}
public Pagination() {
super();
}
public static Integer cpn(Integer pageNo) {
return pageNo != null && pageNo >= 1 ? pageNo : 1;
}
/**
* 建立每一页的链接
* @param url:路径
*/
public void setPageBar(String url) {
pageView.setTotalPage(this.totalSize % this.pageSize == 0 ? (Integer) (this.totalSize / this.pageSize)
: (Integer) (this.totalSize / this.pageSize) + 1);
pageView.setFristPageUrl(urlCat(url, 1));
pageView.setLastPageUrl(urlCat(url, pageView.getTotalPage()));
// 判断是否有上一页
if (this.pageNo == 1) {
pageView.setHasPre(false);
pageView.setPrePageUrl(urlCat(url, 1));
} else {
pageView.setHasPre(true);
pageView.setPrePageNo(this.pageNo - 1);
pageView.setPrePageUrl(urlCat(url, this.pageNo - 1));
}
// 判断是否有下一页
if (pageView.getTotalPage() == this.pageNo) {
pageView.setHasNext(false);
pageView.setNextPageUrl(urlCat(url, pageView.getTotalPage()));
} else {
pageView.setHasNext(true);
pageView.setNextPageNo(pageNo + 1);
pageView.setNextPageUrl(urlCat(url, pageView.getNextPageNo()));
}
for (Integer i = 1; i <= pageView.getTotalPage(); i++) {
StringBuffer sb = new StringBuffer();
if (i != pageNo) {
sb.append("<a href=\"").append(urlCat(url, i)).append("\">").append(i).append("</a>");
} else {
sb.append("<strong>").append(i).append("</strong>");
}
page.add(sb.toString());
}
}
/**
* 拼接字符串:拼接模板:url?name=参数1&isDisplay=参数2&pageNo=参数3
* @param pageNo
* @return
*/
private String urlCat(String url, Integer pageNo) {
StringBuffer sb = new StringBuffer(url).append("&pageNo=").append(pageNo);
return sb.toString();
}
}
/**
* 分页下面的工具栏(页号等)
* @author: 张荣
* @date: 2016年3月22日
*/
public class PageView implements Serializable{
private static final long serialVersionUID = 1L;
//是否有上一页
private Boolean hasPre;
//上一页的页号
private Integer prePageNo;
//上一页的url
private String prePageUrl = "";
//是否有下一页
private Boolean hasNext;
//下一页页号
private Integer nextPageNo;
//下一页的url
private String nextPageUrl = "";
//首页url
private String fristPageUrl = "";
//尾页url
private String lastPageUrl="";
//总页数
private Integer totalPage;
/**get和set方法省略**/
}
Controller中设置页号(注意页号不得为空,初始化页号)!以及根据该ActionURL和附带参数来拼接下方工具栏每个按钮的url(setPageBar方法)!最后在前台用EL表达式取值展示!
其实可以进一步改进;可以将前台所有的URL全部封装在Pagination对象中一个List域中(定义一个List<String>变量存放前台所有的html代码),再在前台通过EL表达式forEach标签遍历显示!
为了提高该分页封装类的通用性!必然会有一个参数list,来储存需要展示的实体集合!我采用的是List<?> lst = new ArrayList<?>();而不要使用List<Object>lst = new ArrayList<Object>();因为前者才是可以接受所有list泛型的对象!
到此,分页插件实体类写完了!经过试验,该类具有极强的复用性,可实用于绝大多数情景!