1、定义PageModel类
public class PageModel {
private int total;
private List datas;
private int pageSize;
private int offset;
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
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;
}
}
2、定义ThreadLocal类
public class MyThreadLocal {
private static ThreadLocal tl = new ThreadLocal();
public static void setValue(PageModel pm) {
tl.set(pm);
}
public static PageModel getValue() {
PageModel pm = (PageModel) tl.get();
if(pm == null) {
pm = new PageModel();
}
return pm;
}
public static void remove() {
tl.remove();
}
}
3、定义我们自己的拦截器
public class PageModelInterceptor extends AbstractInterceptor {
@Override
public String intercept(ActionInvocation invoke) throws Exception {
int offset = 0;
try {
offset = Integer.parseInt(ServletActionContext.getRequest()
.getParameter("pager.offset"));
} catch (NumberFormatException e) {
}
int pageSize = 5;
PageModel pm = MyThreadLocal.getValue();
pm.setOffset(offset<0 ? 0 : offset);
pm.setPageSize(pageSize<0 ? Integer.MAX_VALUE : pageSize);
//将pagemodel中相关的分页数据设置好之后放到Threadlocal中
//在后台进行查询的时候从ThreadLocal中取出PageModel对象然后使用分页数据即可。
MyThreadLocal.setValue(pm);
try {
return invoke.invoke();
}finally {
//注意等到整个拦截器执行完成即一个ThreadLocal完成它的工作后要清除里面的内容
MyThreadLocal.remove();
}
}
}
4、在struts.xml配置文件中加入我们的拦截器
<interceptors>
<!--定义拦截器 -->
<interceptor name="pageModelInterceptor" class="com.bjsxt.oa.util.PageModelInterceptor"/>
<interceptor-stack name="myInterceptorStack">
<interceptor-ref name="exception"/>
<!--加入我们自己定义的拦截器,在拦截器中把分页数据设置到ThreadLocal里然后再dao层取出用于分页 -->
<interceptor-ref name="pageModelInterceptor"/>
<interceptor-ref name="alias"/>
<interceptor-ref name="servletConfig"/>
<interceptor-ref name="i18n"/>
<interceptor-ref name="prepare"/>
<interceptor-ref name="chain"/>
<interceptor-ref name="debugging"/>
<interceptor-ref name="scopedModelDriven"/>
<interceptor-ref name="updatableInterceptor"/>
<interceptor-ref name="modelDriven"/>
<interceptor-ref name="fileUpload"/>
<interceptor-ref name="checkbox"/>
<interceptor-ref name="multiselect"/>
<interceptor-ref name="staticParams"/>
<interceptor-ref name="actionMappingParams"/>
<interceptor-ref name="params">
<param name="excludeParams">dojo\..*,^struts\..*,pager.offset</param>
</interceptor-ref>
<interceptor-ref name="conversionError"/>
<interceptor-ref name="validation">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
<interceptor-ref name="workflow">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="myInterceptorStack"/>
分享到:
相关推荐
分页插件PageHelper是通过mybatis的拦截器实现分页功能的,拦截sql查询请求,添加分页语句,最终实现分页查询功能。 一、分页插件PageHelper支持的数据库类型? Oracle,MySql,MariaDB,SQLite等 二、分页插件...
主要介绍ThreadLocal的原理,实例分析以及注意事项
javaee开发常见的模式有MVC模式,在C层中常常会再次分层,如:servlet(web层)、service(业务逻辑层)、dao(数据访问层),其中service和dao最容易混在一起,如转...所以,使用ThreadLocal可以解决这样的分层问题。
NULL 博文链接:https://bijian1013.iteye.com/blog/2380233
本例以序列号生成的程序为例,展示ThreadLocal的使用
ThreadLocal入门教程。 讲解了线程安全和ThreadLocal的使用的基本知识。
使用c3p0数据源,进行转账操作的小型简单练习;使用ThreadLocal控制事务中的connection唯一,实现mvc三层结构互不干扰。
ThreadLocal应用示例及理解,这个写了相关的示例,可以参考一下。
ThreadLocal
通向架构师的道路(第七天)之漫谈使用ThreadLocal改进你的层次的划分
理解ThreadLocal 理解ThreadLocal 理解ThreadLocal 理解ThreadLocal
NULL 博文链接:https://qixiaopeng.iteye.com/blog/551764
在我们日常 Web 开发中难免遇到需要把一个参数层层的传递到最内层,然后中间层根本不需要使用这个参数,或者是仅仅在特定的工具类中使用,这样我们完全没有必要在每一个方法里面都传递这样一个 通用的参数。...
NULL 博文链接:https://xuranpaoche.iteye.com/blog/1514071
导致JVM内存泄露的ThreadLocal详解 为什么要有ThreadLocal ThreadLocal的使用 实现解析 引发的内存泄漏分析 错误使用ThreadLocal导致 线程不安全分析
NULL 博文链接:https://justsee.iteye.com/blog/791919
学习ThreadLocal,了解其中的原理,以及学习其中的优点!避免坑点!!
Java中ThreadLocal的设计与使用.doc
NULL 博文链接:https://yizhenn.iteye.com/blog/2293339