您的位置:首页 > 编程语言 > Java开发

经典struts2分页方法 JAVA_WEB必备分页

2010-06-01 20:09 399 查看
1. 创建MyThreadLocal类,此类用来存放分页信息和返回的结果集,主要思想是把分页信息放在ThreadLocal中,避免在Service和Dao层传递分页信息
代码如下:

public class MyThreadLocal
{ //新建一个本地变量
private static ThreadLocal tl = new ThreadLocal();

//把分页信息放到ThreadLocal中
public static void setValue(PageModel pm) {
tl.set(pm);
}
//通过ThreadLocal获得分页信息
public static PageModel getValue() {
PageModel pm = (PageModel) tl.get();
if(pm == null) {
pm = new PageModel();
}
return pm;
}

//当调用结束后释放Thread资源
public static void remove() {
tl.remove();
}

}

2. 创建PageModel类,用来存储分页信息和存储数据库返回信息
public class PageModel {

private int total;
private List datas;
private int pageSize;
private int offset;

public int getPageSize() {
return 7;
}
public void setPageSize(int pageSize) {
this.pageSize = 7;
}
public int getOffset() {
return offset;
}
public void setOffset(int offset) {
this.offset = offset;
}
public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
}
public List getDatas() {
return datas;
}
public void setDatas(List datas) {
this.datas = datas;
}

}

3. 创建PageModelInterceptor类,用来接收分页信息
public class PageModelInterceptor extends AbstractInterceptor {

@Override
public String intercept(ActionInvocation invoke) throws Exception {
int offset = 0;
try {

offset = Integer.parseInt(ServletActionContext.getRequest()
.getParameter("pagerOffset"));
} catch (NumberFormatException e) {
}
int pageSize = 8;
PageModel pm = MyThreadLocal.getValue();
pm.setOffset(offset);
pm.setPageSize(pageSize<0 ? Integer.MAX_VALUE : pageSize);
//将pagemodel中相关的分页数据设置好之后放到Threadlocal中
//在后台进行查询的时候从ThreadLocal中取出PageModel对象然后使用分页数据即可。
MyThreadLocal threadLocal = new MyThreadLocal();
threadLocal.setValue(pm);
try {
return invoke.invoke();
}
finally {
//注意等到整个拦截器执行完成即一个ThreadLocal完成它的工作后要清除里面的内容
MyThreadLocal.remove();
}
}

}

4. 后台得到分页参数进行分页
searchpaginated( hql, null, MyThreadLocal.getValue().getOffset(),8
);

源码下载:http://download.csdn.net/source/2416869
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: