基于Struts2框架的分页技术分享
写在最前面
今天被朋友圈一条京东确认12G数据用户数据泄漏 你要跑赢骗子的说说吓了一跳。记得好像在去年的时候就好像听说过说Struts2存在漏洞,只是没有造成这么大的损失。不过经这么一档子事儿,我相信struts2会越来越完美哈~~~
来看今天的新get√ 以下内容简略的介绍了struts2中的分页技术处理,不适合刚学struts2者学习,有过struts2项目经验的同学无碍。
分页的目的是为了在网页上动态的展示,从数据库中查询出的数据。以前在学校学的分页处理都感觉很复杂,今天学习到一个自己觉得挺简单的处理方法。所以,简单分享一下。
首先
在进行分页处理前需要用到以下几个类:
将有关分页的属性封装成一个名为PageBean的类
package com.stuinforms.hoictas.entity;
public class PageBean
{
private int page; //第几页
private int pageSize; //每页记录数
private int start; //第几条数据
public int getPage()
{
return page;
}
public void setPage(int page)
{
this.page = page;
}
public int getPageSize()
{
return pageSize;
}
public void setPageSize(int pageSize)
{
this.pageSize = pageSize;
}
public int getStart()
{
return (page - 1) * pageSize;
}
public void setStart(int start)
{
this.start = start;
}
@Override
public String toString()
{
return "PageBean{" +
"page=" + page +
", pageSize=" + pageSize +
", start=" + start +
'}';
}
}
将通常分页操作的代码提取出来成PageUtil工具类。
package com.stuinforms.hoictas.util;
public class PageUtil
{
public static String genPagation(String targetUrl, int totalNum, int currentPage, int pageSize)
{
int totalPage = totalNum % pageSize == 0 ? totalNum / pageSize : totalNum / pageSize + 1;
StringBuffer pageCode = new StringBuffer();
pageCode.append("<li><a href='" + targetUrl + "?page=1'>首页</a></li>");
if (currentPage == 1)
{
pageCode.append("<li class='disabled'><a href='#'>上一页</a></li>");
} else
{
pageCode.append("<li><a href='" + targetUrl + "?page=" + (currentPage - 1) + "'>上一页</a></li>");
}
for (int i = currentPage - 2; i <= currentPage + 2; i++)
{
if (i < 1 || i > totalPage)
{
continue;
}
if (i == currentPage)
{
pageCode.append("<li class='active'><a href='#'>" + i + "</a></li>");
} else
{
pageCode.append("<li><a href='" + targetUrl + "?page=" + i + "'>" + i + "</a></li>");
}
}
if (currentPage == totalPage)
{
pageCode.append("<li class='disabled'><a href='#'>下一页</a></li>");
} else
{
pageCode.append("<li><a href='" + targetUrl + "?page=" + (currentPage + 1) + "'>下一页</a></li>");
}
pageCode.append("<li><a href='" + targetUrl + "?page=" + totalPage + "'>尾页</a></li>");
return pageCode.toString();
}
}
现在我们来实际应用一下上面两个类。假设我们现在要做的是一个学生信息管理系统,我们现在需要完善其中的一项功能,叫查看数据字典。就是在网页上用户向后台发送了一个action请求,后台返回一个list集合并进行分页。那么要在对应的Action中写入如下属性:
if (StringUtil.isEmpty(page))
{
page = "1";
}
因为是第一次访问,所以这个action的page的值为null。程序会进入这个if语句将page赋值为1。
我们使用PagaBean类创建一个对象,并为它设置了page属性和pageSize属性
PageBean pageBean = new PageBean();
pageBean.setPage(Integer.parseInt(page));
pageBean.setPageSize(Integer.parseInt(PropertiesUtil.getValue("pageSize")));
dataDicDao.dataDicList()方法的作用就是将从第0条数据开始到第8条数据(我们假设pageSize取到的值为8,pageSize设置每页数据的条数)的list集合。dataDicListCount()方法是查询所有数据的总条数(total),并返回一个int类型的结果。
dataDicList = dataDicDao.dataDicList(conn, dataDic, pageBean);
total = dataDicDao.dataDicListCount(conn, dataDic);
有了这些值后,我们就可以使用PageUtil的genPagation()返回分页拼装出来的html代码,这里PageUtil中targetUrl属性是点击分页中某一页时,所请求的action以及处理方法。
pageCode = PageUtil.genPagation(httpServletRequest.getContextPath() + "/dataDic!list", total, pageBean.getPage(), pageBean.getPageSize());
这样就大功告成了。