已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Struts2中实现自定义分页标签 Struts2中实现自定义标签很简单,主要分为3步: 1.创建taglib文件(.tld),编写标签声明。 2.编写自定义标签类。 3.在页面中使用标签。 下面以一个自定义的分页标签为例,进行说明。 其实,开发自定义标签并不需要Struts2的支持,一般情况下,只需要继承javax.servlet.jsp.tagext.BodyTagSupport类,重写doStartTag,doEndTag等方法即可。这里在实现自定义标签时,继承的2个类分别是org.apache.struts2.views.jsp.ComponentTagSupport和ponents.Component,ComponentTagSupport实际上是对BodyTagSupport的一次封装,看一下ComponentTagSupport类的继承关系就明了了:Java代码 1. java.lang.Object 2. extendedbyjavax.servlet.jsp.tagext.TagSupport 3. extendedbyjavax.servlet.jsp.tagext.BodyTagSupport 4. extendedbyorg.apache.struts2.views.jsp.StrutsBodyTagSupport 5. extendedbyorg.apache.struts2.views.jsp.ComponentTagSupportjava.lang.Objectextended by javax.servlet.jsp.tagext.TagSupportextended by javax.servlet.jsp.tagext.BodyTagSupportextended by org.apache.struts2.views.jsp.StrutsBodyTagSupportextended by org.apache.struts2.views.jsp.ComponentTagSupport继承ComponentTagSupport类是为了获得标签中的属性值,并包装成Component对象。继承Component类是为了从Struts2中的ValueStack中获得相对应的值。1.声明自定义标签。首先,需要创建一个tld文件,这是一个标准的XML文件,这个文件中就包含有对自定义标签的声明,声明指出了标签的名字,实现标签的类,标签的属性等信息。当在页面中使用该标签时,web服务器就会从这个文件中找出相对应的标签类,并实例化后执行。这个文件其实与struts.xml文件的作用相类似。tangs.tldXml代码 1. 2. 1.2. 3. 2.2.34. 1.25. tangs6. /tangs7. TangsTags8. 9. 10. pages11. com.tangs.tag.PageTag/标签类 12. empty13. /标签中的属性 14. cpage/属性名 15. true/是否必须 16. true/表示该自定义标签的某属性的值可以直接指定或者通过动态计算指定 17. 18. 19. total20. true21. true22. 23. 24. url25. true26. true27. 28. 29. tangs/tangsTangs Tagspagescom.tangs.tag.PageTag /标签类empty /标签中的属性cpage /属性名true /是否必须true /表示该自定义标签的某属性的值可以直接指定或者通过动态计算指定totaltruetrueurltruetrue2.编写标签类PageTag.javaJava代码 1. packagecom.tangs.tag; 2. 3. importcom.opensymphony.xwork2.util.ValueStack; 4. importjavax.servlet.http.HttpServletRequest; 5. importjavax.servlet.http.HttpServletResponse; 6. ponents.Component; 7. importorg.apache.struts2.views.jsp.ComponentTagSupport; 8. 9. /* 10. *分页标签 11. *authortangs 12. */13. publicclassPageTagextendsComponentTagSupport 14. privateStringcpage;/当前页 15. privateStringtotal;/总页数 16. privateStringurl;/请求地址 17. 18. publicvoidsetCpage(Stringcpage) 19. this.cpage=cpage; 20. 21. 22. publicvoidsetTotal(Stringtotal) 23. this.total=total; 24. 25. 26. publicvoidsetUrl(Stringurl) 27. this.url=url; 28. 29. 30. Override31. publicComponentgetBean(ValueStackarg0,HttpServletRequestarg1,HttpServletResponsearg2) 32. returnnewPages(arg0);/返回PagesComponent,分页的逻辑处理都在这个Component中 33. 34. 35. /获得参数 36. protectedvoidpopulateParams() 37. super.populateParams(); 38. 39. Pagespages=(Pages)component; 40. pages.setCpage(cpage); 41. pages.setTotal(total); 42. pages.setUrl(url); 43. 44. package com.tangs.tag;import com.opensymphony.xwork2.util.ValueStack;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import ponents.Component;import org.apache.struts2.views.jsp.ComponentTagSupport;/* 分页标签* author tangs*/public class PageTag extends ComponentTagSupport private String cpage; /当前页private String total; /总页数private String url; /请求地址public void setCpage(String cpage) this.cpage = cpage;public void setTotal(String total) this.total = total;public void setUrl(String url) this.url = url;Overridepublic Component getBean(ValueStack arg0, HttpServletRequest arg1, HttpServletResponse arg2) return new Pages(arg0); /返回Pages Component,分页的逻辑处理都在这个Component中/获得参数protected void populateParams() super.populateParams();Pages pages = (Pages)component;pages.setCpage(cpage);pages.setTotal(total);pages.setUrl(url); Pages.javaJava代码 1. packagecom.tangs.tag; 2. 3. importcom.opensymphony.xwork2.util.ValueStack; 4. importjava.io.IOException; 5. importjava.io.Writer; 6. importjava.util.logging.Level; 7. importjava.util.logging.Logger; 8. ponents.Component; 9. 10. /* 11. *分页逻辑Bean 12. *authortangs 13. */14. publicclassPagesextendsComponent 15. privateStringcpage; 16. privateStringtotal; 17. privateStringurl; 18. 19. publicStringgetCpage() 20. returncpage; 21. 22. 23. publicvoidsetCpage(Stringcpage) 24. this.cpage=cpage; 25. 26. 27. publicStringgetTotal() 28. returntotal; 29. 30. 31. publicvoidsetTotal(Stringtotal) 32. this.total=total; 33. 34. 35. publicStringgetUrl() 36. returnurl; 37. 38. 39. publicvoidsetUrl(Stringurl) 40. this.url=url; 41. 42. 43. 44. publicPages(ValueStackarg0) 45. super(arg0); 46. 47. 48. Override49. publicbooleanstart(Writerwriter) 50. booleanresult=super.start(writer); 51. try 52. StringBuilderstr=newStringBuilder(); 53. booleanisValid=true; 54. 55. /从ValueStack中取出数值 56. if(isValid) 57. if(total.startsWith(%)&total.endsWith() 58. total=total.substring(2,total.length()-1); 59. total=(String)this.getStack().findValue(total); 60. isValid=total=null?false:true; 61. else 62. isValid=false; 63. 64. 65. if(isValid) 66. if(cpage.startsWith(%)&cpage.endsWith() 67. cpage=cpage.substring(2,cpage.length()-1); 68. cpage=(String)this.getStack().findValue(cpage); 69. isValid=cpage=null?false:true; 70. else 71. isValid=false; 72. 73. 74. if(isValid) 75. if(url.startsWith(%)&url.endsWith() 76. url=url.substring(2,url.length()-1); 77. url=(String)this.getStack().findValue(url); 78. isValid=url=null?false:true; 79. else 80. isValid=false; 81. 82. 83. 84. if(isValid) 85. IntegercpageInt=Integer.valueOf(cpage); 86. /当前页与总页数相等 87. if(cpage.equals(total) 88. /如果total=1,则无需分页,显示“第1页共1页” 89. if(1.equals(total) 90. str.append(第+cpage+页); 91. str.append(共+total+页); 92. else 93. /到达最后一页,显示“首页上一页末页” 94. str.append(首页上一页末页); 104. 105. else 106. /当前页与总页数不相同 107. if(1.equals(cpage) 108. /第一页,显示“首页下一页末页” 109. str.append(首页下一页末页); 119. else 120. /不是第一页,显示“首页上一页下一页末页” 121. str.append(首页上一页下一页末页); 134. 135. 136. 137. 138. writer.write(str.toString(); 139. 140. catch(IOExceptionex) 141. Logger.getLogger(Pages.class.getName().log(Level.SEVERE,null,ex); 142. 143. returnresult; 144. 145. package com.tangs.tag;import com.opensymphony.xwork2.util.ValueStack;import java.io.IOException;import java.io.Writer;import java.util.logging.Level;import java.util.logging.Logger;import ponents.Component;/* 分页逻辑Bean* author tangs*/public class Pages extends Component private String cpage;private String total;private String url;public String getCpage() return cpage;public void setCpage(String cpage) this.cpage = cpage;public String getTotal() return total;public void setTotal(String total) this.total = total;public String getUrl() return url;public void setUrl(String url) this.url = url;public Pages(ValueStack arg0) super(arg0);Overridepublic boolean start(Writer writer) boolean result = super.start(writer);try StringBuilder str = new StringBuilder();boolean isValid = true;/从ValueStack中取出数值if (isValid) if (total.startsWith(%) & total.endsWith() total = total.substring(2, total.length() -1);total = (String)this.getStack().findValue(total);isValid = total = null ? false : true; else isValid = false;if (isValid) if (cpage.startsWith(%) & cpage.endsWith() cpage = cpage.substring(2, cpage.length() - 1);cpage = (String)this.getStack().findValue(cpage);isValid = cpage = null ? false : true; else isValid = false;if (isValid) if (url.startsWith(%) & url.endsWith() url = url.substring(2, url.length() - 1);url = (String)this.getStack().findValue(url);isValid = url = null ? false : true; else isValid = false;if (isValid) Integer cpageInt = Integer.valueOf(cpage);/当前页与总页数相等if (cpage.equals(total) /如果total = 1,则无需分页,显示“第1页 共1页”if (1.equals(total) str.append(第 + cpage + 页);str.append( 共 + total + 页); else /到达最后一页,显示“首页 上一页 末页”str.append(首页 上一页 末页); else /当前页与总页数不相同if (1.equals(cpage) /第一页,显示“首页 下一页 末页”str.append(首页 下一页 末页); else /不是第一页,显示“首页 上一页 下一页 末页”str.append(首页 上一页 下一页 末页);writer.write(str.toString(); catch (IOException ex) Logger.getLogger(Pages.class.getName().log(Level.SEVERE, null, ex);return result;3.服务端服务端主要是获得请求然后转向显示的页面DisplayAction.javaJava代码 1. /* 2. *Tochangethistemplate,chooseTools|Templates 3. *andopenthetemplateintheeditor. 4. */5. 6. packagecom.tangs.action; 7. 8. importcom.opensymphony.xwork2.ActionSupport; 9. 10. /* 11. * 12. *authortangs 13. */14. publicclassDisplayActionextendsActionSupport 15. privateStringcpage; 16. privateStringtotal; 17. privateStringurl; 18. 19. publicStringlist() 20. 21. /Getdatafromserver 22. /. 23. /这里没有做任何逻辑,直接跳转到了页面 24. returnSUCCESS; 25. 26. publicStringgetCpage() 27. returncpage; 28. 29. 30. publicvoidsetCpage(Stringcpage) 31. this.cpage=cpage; 32. 33. 34. publicStringgetTotal() 35. returntotal; 36. 37. 38. publicvoidsetTotal(Stringtotal) 39. this.total=total; 40. 41. 42. publicStringgetUrl() 43. returnurl; 44. 45. 46. publicvoidsetUrl(Stringurl) 47. this.url=url; 48. 49. 50. 51. /* To cha
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 论文里论文成果怎么写
- 本科毕业论文排版格式-2025本科生毕业论文格式排版
- 施工过程建筑工程质量提升措施论文
- 工程项目管理论文施工
- 煤矿通风中当前存在的问题及解决对策
- 浅谈当前农村改造建设中存在的问题及对策
- 区域性股权市场的发展现状、现实困境及解决对策
- 工程合同一般约定几年内(3篇)
- 工程合同设计费占比比例(3篇)
- 2025锦屏中学高考录取信息
- 《激光拉曼光谱法》课件
- 人力资源管理高级实验试题库
- 9.2文化发展的基本路径 课件-高中政治统编版必修4
- 初中物理物态变化 跨学科实践 对冰箱中热现象的探究 2024-2025学年苏科版物理八年级上学期
- 卡西欧手表5174机芯中文使用说明书
- 2024年铁路线路工(技师)技能鉴定理论考试题库(含答案)
- YYT 0657-2017 医用离心机行业标准
- 沪科版九年级物理温度与物态变化检测题(含答案)
- 数据挖掘与机器学习全套教学课件
- (正式版)QBT 5998-2024 宠物尿垫(裤)
- 屠宰企业安全生产应急预案
评论
0/150
提交评论