分享

使用ThreadLocal结合struts2的拦截器实现分页

 燮羽 2010-10-27
1、定义PageModel类 
Xml代码 
  1. public class PageModel {  
  2.     private int total;  
  3.     private List datas;  
  4.     private int pageSize;  
  5.     private int offset;  
  6.       
  7.     public int getPageSize() {  
  8.         return pageSize;  
  9.     }  
  10.     public void setPageSize(int pageSize) {  
  11.         this.pageSize = pageSize;  
  12.     }  
  13.     public int getOffset() {  
  14.         return offset;  
  15.     }  
  16.     public void setOffset(int offset) {  
  17.         this.offset = offset;  
  18.     }  
  19.     public int getTotal() {  
  20.         return total;  
  21.     }  
  22.     public void setTotal(int total) {  
  23.         this.total = total;  
  24.     }  
  25.     public List getDatas() {  
  26.         return datas;  
  27.     }  
  28.     public void setDatas(List datas) {  
  29.         this.datas = datas;  
  30.     }  
  31. }  



2、定义ThreadLocal类 
Java代码 
  1. public class MyThreadLocal {  
  2.     private static ThreadLocal tl = new ThreadLocal();  
  3.       
  4.     public static void setValue(PageModel pm) {  
  5.         tl.set(pm);  
  6.     }  
  7.       
  8.     public static PageModel getValue() {  
  9.         PageModel pm = (PageModel) tl.get();  
  10.         if(pm == null) {  
  11.             pm = new PageModel();  
  12.         }  
  13.         return pm;  
  14.     }  
  15.       
  16.     public static  void remove() {  
  17.         tl.remove();  
  18.     }  
  19. }  


3、定义我们自己的拦截器 
Java代码 
  1. public class PageModelInterceptor extends AbstractInterceptor {  
  2.   
  3.     @Override  
  4.     public String intercept(ActionInvocation invoke) throws Exception {  
  5.         int offset = 0;  
  6.         try {  
  7.             offset = Integer.parseInt(ServletActionContext.getRequest()  
  8.                     .getParameter("pager.offset"));  
  9.         } catch (NumberFormatException e) {  
  10.         }  
  11.         int pageSize = 5;  
  12.         PageModel pm = MyThreadLocal.getValue();  
  13.         pm.setOffset(offset<0 ? 0 : offset);  
  14.         pm.setPageSize(pageSize<0 ? Integer.MAX_VALUE : pageSize);  
  15.                   //将pagemodel中相关的分页数据设置好之后放到Threadlocal中  
  16. //在后台进行查询的时候从ThreadLocal中取出PageModel对象然后使用分页数据即可。  
  17.         MyThreadLocal.setValue(pm);  
  18.         try {  
  19.             return invoke.invoke();  
  20.         }finally {  
  21. //注意等到整个拦截器执行完成即一个ThreadLocal完成它的工作后要清除里面的内容  
  22.             MyThreadLocal.remove();  
  23.         }  
  24.     }  
  25. }  


4、在struts.xml配置文件中加入我们的拦截器 
Xml代码 
  1. <interceptors>  
  2. <!--定义拦截器 -->  
  3.     <interceptor name="pageModelInterceptor" class="com.bjsxt.oa.util.PageModelInterceptor"/>  
  4.               <interceptor-stack name="myInterceptorStack">  
  5.                 <interceptor-ref name="exception"/>  
  6. <!--加入我们自己定义的拦截器,在拦截器中把分页数据设置到ThreadLocal里然后再dao层取出用于分页 -->  
  7.                 <interceptor-ref name="pageModelInterceptor"/>  
  8.                 <interceptor-ref name="alias"/>  
  9.                 <interceptor-ref name="servletConfig"/>  
  10.                 <interceptor-ref name="i18n"/>  
  11.                 <interceptor-ref name="prepare"/>  
  12.                 <interceptor-ref name="chain"/>  
  13.                 <interceptor-ref name="debugging"/>  
  14.                 <interceptor-ref name="scopedModelDriven"/>  
  15.                 <interceptor-ref name="updatableInterceptor"/>  
  16.                 <interceptor-ref name="modelDriven"/>  
  17.                 <interceptor-ref name="fileUpload"/>  
  18.                 <interceptor-ref name="checkbox"/>  
  19.                 <interceptor-ref name="multiselect"/>  
  20.                 <interceptor-ref name="staticParams"/>  
  21.                 <interceptor-ref name="actionMappingParams"/>  
  22.                 <interceptor-ref name="params">  
  23.                   <param name="excludeParams">dojo\..*,^struts\..*,pager.offset</param>  
  24.                 </interceptor-ref>  
  25.                 <interceptor-ref name="conversionError"/>  
  26.                 <interceptor-ref name="validation">  
  27.                     <param name="excludeMethods">input,back,cancel,browse</param>  
  28.                 </interceptor-ref>  
  29.                 <interceptor-ref name="workflow">  
  30.                     <param name="excludeMethods">input,back,cancel,browse</param>  
  31.                 </interceptor-ref>  
  32.             </interceptor-stack>  
  33.         </interceptors>     
  34.   
  35. <default-interceptor-ref name="myInterceptorStack"/>

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多