像插件一样的struts2框架的分页实现(一个类就实现一个分页功能)

对于大多初学者来说,分页功能可能是大家都头疼的一件事。有些人,可能为了实现分页效果,而在页面上写了很多让自己都感觉头晕的一大堆代码。虽然最后可以实现分页效果,但是确不具备着可移植,可重用的效果。这样导致页面上的代码增多,而到其他地方用到分页时,只能复制粘贴重复的代码。这样就造成页面代码的混乱。而怎样实现分页的可移植,可重用的效果呢?这就是我要介绍的。
---------Pagination(类)-------
[color=red]属性[/color]:get,set方法省了,自己生成,别说不会,不然我敲死你…
/** 当前页 */
private int pageNo;
/** 每页数据量 */
private int pageSize;
/** 总数据量 */
private int allCount;
/** 总页数 */
private int allPage;
/** 每页开始 */
private int recordStart;
/** 每页结束 */
private int recordEnd;
/** 显示页数 */
private int showCount;
/** 显示开始 */
private int showStart;
/** 显示结束 */
private int showEnd;
/** RUL地址*/
private String url;//页面传过来的URL(具体有什么用等下会解释,上面的应该都很容易理解了吧)
/** 样式名字*/
private String styleClass;

[color=red]构造方法:[/color]

/**
* 构造方法,缺省每页记录数为12、显示页码数为9、样式名字为空
* @param pageNo 当前页
* @param allCount 总记录数
* @param url 分页URL
*/
public Pagination(int pageNo, int allCount,String url) {
this(pageNo,12,allCount,9,url,"");
}
/**
* 构造方法,缺省显示页码数为9、样式名字为空
* @param pageNo 当前页
* @param pageSize 每页记录数
* @param allCount 总记录数
* @param url 分页URL
*/
public Pagination(int pageNo, int pageSize, int allCount,String url) {
this(pageNo,pageSize,allCount,9,url,"");
}
/**
* 构造方法,缺省样式名字为空
* @param pageNo 当前页
* @param pageSize 每页记录数
* @param allCount 总记录数
* @param showCount 显示页码数
* @param url 分页URL
*/
public Pagination(int pageNo, int pageSize, int allCount, int showCount ,String url) {
this(pageNo,pageSize,allCount,showCount,url,"");
}
/**
* 构造方法
* @param pageNo 当前页
* @param pageSize 每页记录数
* @param allCount 总记录数
* @param showCount 显示页码数
* @param url 分页URL
* @param styleClass 样式名字
*/
public Pagination(int pageNo, int pageSize, int allCount, int showCount,String url,String styleClass) {
this.pageNo = pageNo;
this.pageSize = pageSize;
this.allCount = allCount;
this.showCount = showCount ;
this.url = url ;
this.styleClass = styleClass ;
init();
}

[color=red]初始化:[/color]
/**
* 初始化分页各种参数
*/
private void init() {
allPage = allCount%pageSize==0 ? allCount/pageSize : allCount/pageSize+1 ;
if(pageNo>allPage){
pageNo = allPage ;
}
if (pageNo < 1) {
pageNo = 1;
}
recordStart = (pageNo-1) * pageSize ;
recordEnd = Math.min(recordStart+pageSize, allCount);
showCount = Math.min(showCount, allPage);
if (showCount>=allPage) {
showStart = 1;
showEnd = allPage;
} else {
if (pageNo <= (showCount+1)/2) {
showStart = 1;
showEnd = showCount ;
} else if(pageNo > allPage-(showCount+1)/2 ) {
showStart = allPage - showCount + 1 ;
showEnd = allPage ;
} else{
showStart = pageNo - showCount/2;
showEnd = showStart+showCount-1 ;
}
}
}
--------------------------------------

/**
* 获取分页数据
* @param <T> 范型参数
* @param list 需要分页的总数据集合
* @return
*/
public <T> List<T> getPageDate(List<T> list) {
return list.subList(recordStart,recordEnd);
}

[color=red]toString方法:[/color](这个就是分页的灵魂了,里边实现了为网页动态加入的HTML代码,这种编程方式可以实现网页代码后台生成机制,这样你只要在页面用$(Pagination)这个表达式实现就行了,这样利用toString()这个方法,在后台构造出页面的html的代码,这样你就可以像插件一样,随时的在页面上放置到任何你想要放置的位置了。)

/**
* 生成页面的分页元素(分页html页面标签)
*/
public String toString(){
StringBuffer sb = new StringBuffer();
sb.append("<div class='"+styleClass+"'>");
if(pageNo<2){
sb.append("<a>首 页</a> ");
sb.append("<a>上一页</a> ");
}else{
sb.append("<a href='"+url+"?pageNo=1'>首 页</a> ");
sb.append("<a href='"+url+"?pageNo="+(pageNo-1)+"'>上一页</a> ");
}
for (int i = showStart; i < pageNo; i++) {
sb.append("<a href='"+url+"?pageNo="+i+"'>" + i + "</a> ");
}
sb.append("<span>" + pageNo + "</span> ");
for (int i = pageNo + 1; i <= showEnd; i++) {
sb.append("<a href='"+url+"?pageNo="+i+"'>" + i + "</a> ");
}
if(pageNo>=allPage){
sb.append("<a>下一页</a> ");
sb.append("<a>尾 页</a> ");
}else{
sb.append("<a href='"+url+"?pageNo="+(pageNo+1)+"'>下一页</a> ");
sb.append("<a href='"+url+"?pageNo="+allPage+"'>尾 页</a> ");
}
sb.append("</div>");
return sb.toString();
}

------------------Action-----------------
在你想要实现分页的那个Action类里面,get\set他们,那么你就可以在页面上通过$(Pagination)来显示出来。
private Pagination pagination;
private Integer pageNo = 1; //这个一定要有,不然会出错的


其实这个分页的功能,为什么能在页面上实现可重用,可移植,可随意显示,都是利用toString()这个方法,在后台构造好你要在html页面的现实效果,然后在这个方法类里面实现这些业务功能,这样再通过Action来get/set这个类,就可能在页面上随意的显示了...这样就可以独立出来,像一个插件一样,几时用到,就几时调用就行了...呵呵,这个就是toString()的好处。
希望大家能体会到toString带来的好处,如果大家有什么好例子,也可以相互分享下。喜欢并觉得不错的,希望支持下,这是我发表的第二篇文章,给点动力。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值