Struts2自定义分标签_第1页
Struts2自定义分标签_第2页
Struts2自定义分标签_第3页
Struts2自定义分标签_第4页
Struts2自定义分标签_第5页
免费预览已结束,剩余2页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、最近在学习 Struts2,并使用 Struts2 开发系统。在网上看了好多的 struts2 的分页,虽然都实现了分页的功能,但是感觉不是非常好,需要我们在每次写分页的时候做很多的工作,而我认为分页应该是一个通用的组件,开发人员在开发的过程中不应该在分页上花费太多的精力。所以,一直想封装一个比较通用的分页组件,而设计分页组件的时候,怎样保证动态查询的参数不丢失,成为实现的一个难点。感谢 tangshuo 和 shim 的分享,让我实现了这样的一个分页组件。该组件采用自定 struts2 标签的方式实现。首先建立一个构建分页标签信息的类:Pages.java/*构建分页标签体的类*author

2、Java 软件工程师,专注于 java 领域新技术的研究和系统设计。*date2008-11-4 下午 02:52:19*version1.0*/publicclassPagesextendsComponentprivateHttpServletRequestrequest;privateStringpageNo;/当前页码privateStringtotal;/总页数privateStringstyleClass;/分页的样式privateStringtheme;/分页的主题privateStringurl;/action 的路径privateStringurlType;/路径的类型,主要用

3、于 URL 重写的扩展/省略 get、set 方法publicPages(ValueStackarg0,HttpServletRequestrequest)super(arg0);this.request=request;Overridepublicbooleanend(Writerwriter,Stringbody)booleanresult=super.start(writer);try/从 ValueStack 中取出数值Objectobj=this.getStack().findValue(pageNo);pageNo=String.valueOf(Integer)obj);obj=t

4、his.getStack().findValue(total);total=String.valueOf(Integer)obj);StringBuilderstr=newStringBuilder();Mapcont=this.getStack().getContext();StrutsRequestWrapperreq=(StrutsRequestWrapper)cont.get(StrutsStatics.HTTP_REQUEST);if(url=null|.equals(url)url=(String)req.getAttribute(javax.servlet.forward.req

5、uest_uri);)StringpageNoStr=?pageNo=;if(dir.equals(urlType)/当 url 的类型为目录类型时,比如http:/localhost:8090/yongtree/page/1pageNoStr=;if(1.equals(pageNo)/第一页时if(url.lastIndexOf(/)!=url.length()-1)if(url.lastIndexOf(1)=url.length()-1)如果有页码 1,则去掉 1url=url.substring(0,url.length()-1);elseif(url.lastIndexOf(/)!=u

6、rl.length()-1)如果没有页码 1,并且最后不是/时,加上/url=url+/;elseurl=url.substring(0,url.lastIndexOf(/)+1);/下面这段处理主要是用来处理动态查询的参数,并拼接成 urlStringBufferperUrl=newStringBuffer();if(this.getParameters().size()!=0)Iteratoriter=this.getParameters().keySet().iterator();while(iter.hasNext()Stringkey=(String)iter.next();Obje

7、cto=this.getParameters().get(key);perUrl.append(&).append(key).append(=).append(o);IntegercpageInt=Integer.valueOf(pageNo);str.append();elsestr.append();/文本样式 if(theme=null|text.equals(theme)/当前页与总页数相等if(pageNo.equals(total)/如果 total=1,则无需分页,显示“第 1 页共 1 页”if(1.equals(total)str.append(第+pageNo+页)

8、;str.append(共+total+页);else/到达最后一页,显示首页上一页末页str.append(首页);str.append(上页);str.append(末页);else/当前页与总页数不相同if(1.equals(pageNo)/第一页,显示首页下一页末页”str.append(首页);str.append(下页);str.append(末页);else/不是第一页,显示首页上一页下一页末页”str.append(首页);str.append(上页);str.append(下页);str.append(末页);elseif(number.equals(theme)/数字式12

9、345678910IntegertotalInt=Integer.valueOf(total);/如果只有一页,则无需分页str.append();if(totalInt=1)str.append(1);elseif(cpageInt1)/当前不是第一组,要显示“/:返回前一组第一页/:返回前一页str.append(?);str.append(?);elsestr.append(?);intv=(cpageInt-4)0?(cpageInt-4):1;intv1=(cpageInt+4)totalInt?(cpageInt+4):totalInt;if(v1=totalInt)v=total

10、Int-10;v=(v=0?1:v);/如果为负数,则修改为 1elseif(v=1&v110?10:totalInt;/10 个为一组显示for(inti=v;i=v1;i+)if(cpageInt=i)/当前页要加粗显示str.append(+i+);else/str.append(+i+);str.append(+i+);/如果多于 1 组并且不是最后一组,显示“”if(cpageInt:返回下一组最后一页/:返回下一页str.append(?);str.append(?);elsestr.append(?);str.append();str.append();writer.wr

11、ite(str.toString();catch(IOExceptionex)ex.printStackTrace();returnresult;自定义分页标签结构的类:PageTag.java/*自定义分页标签结构或属性*authorJava 软件工程师,专注于 java 领域新技术的研究和系统设计*date2008-11-4 下午 03:00:40*version1.0*/publicclassPageTagextendsComponentTagSupportprivateString pageNoprivateString total;privateString styleClasspr

12、ivateString theme;privateString url;privateString urlType;publicvoidsetUrlType(StringurlType)this.urlType=urlType;)publicvoidsetUrl(Stringurl)this.url=url;)publicvoidsetTheme(Stringtheme)this.theme=theme;)publicvoidsetStyleClass(StringstyleClass)this.styleClass=styleClass;)publicvoidsetPageNo(String

13、pageNo)this.pageNo=pageNo;)publicvoidsetTotal(Stringtotal)this.total=total;)OverridepublicComponentgetBean(ValueStackarg0,HttpServletRequestarg1,HttpServletResponsearg2)returnnewPages(arg0,arg1);)protectedvoidpopulateParams()super.populateParams();Pagespages=(Pages)component;pages.setPageNo(pageNo);

14、pages.setTotal(total);pages.setStyleClass(styleClass);pages.setTheme(theme);pages.setUrl(url);pages.setUrlType(urlType);)创建自定义标签的 tld 文件:1.01.2yt/yongtree-tagsJava 软件工程师,专注于 java 领域新技术的研究和系统设计。的自定义标签pagescom.baiyyy.polabs.tag.PageTagjsp分页标签pageNofalsetruetotalfalsetruestyleClassfalsetrue分页标签的样式,不配置此

15、项将采用默认的样式themefalsetrue分页的主题,现支持 number|text 两种主题urlfalsetrue分页提交的路径,默认不用配置该项,自动获取系统访问路径。urlTypefalsetrueurl 的类型,现在支持两种 url 类型,第一种默认的 url,这种情况不需要设置;第二种情况是目录型的 url,比如 http:/ dir。此种情况不支持动态查询,故标签体中不能加入参数这样一个分页标签就实现完了,下一步让我们看看该怎样使用吧。在页面中引入自定义的标签库:开始配置分页标签信息:共页第页!一分页的动态查询参数需要全部注册在这里 a这样一个分页组件就完成了,但是只是完成了

16、表现上的功能,我们还需要在后台进行封装,我对它进行了封装,做了一个 PageAction.javapublicclassPageActionextendsBaseActionprivateIntegerpageNo=1;privateIntegereveryPage=10;privateIntegertotal;Pagepage=newPage();publicIntegergetPageNo()returnpageNo;publicvoidsetPageNo(IntegerpageNo)this.page.setCurrentPage(pageNo);this.pageNo=pageNo;publicIntegergetEveryPage()returneveryPage;pub

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论