没有合适的资源?快使用搜索试试~ 我知道了~
struts2自定义标签案例详解
5星 · 超过95%的资源 需积分: 11 101 下载量 76 浏览量
2011-01-27
14:37:52
上传
评论 2
收藏 269KB DOC 举报
温馨提示
试读
17页
Struts2中实现自定义标签很简单,主要分为3步: 1.创建taglib文件(.tld),编写标签声明。 2.编写自定义标签类。 3.在页面中使用标签。 下面以一个自定义的分页标签为例,进行说明。 其实,开发自定义标签并不需要Struts2的支持,一般情况下,只需要继承javax.servlet.jsp.tagext.BodyTagSupport类,重写doStartTag,doEndTag等方法即可。这里在实现自定义标签时,继承的2个类分别是org.apache.struts2.views.jsp.ComponentTagSupport和org.apache.struts2.components.Component,ComponentTagSupport实际上是对BodyTagSupport的一次封装,看一下ComponentTagSupport类的继承关系就明了了: Java代码 :1. java.lang.Object 2. extended by javax.servlet.jsp.tagext.TagSupport 3. extended by javax.servlet.jsp.tagext.BodyTagSupport 4. extended by org.apache.struts2.views.jsp.StrutsBodyTagSupport 5. extended by org.apache.struts2.views.jsp.ComponentTagSupport
资源推荐
资源详情
资源评论
Struts2 中实现自定义分页标签
Struts2 中实现自定义标签很简单,主要分为 3 步:
1.创建 taglib 文件(.tld),编写标签声明。
2.编写自定义标签类。
3.在页面中使用标签。
下面以一个自定义的分页标签为例,进行说明。
其实,开发自定义标签并不需要 Struts2 的支持,一般情况下,只需要继承
javax.servlet.jsp.tagext.BodyTagSupport 类,重写 doStartTag,doEndTag 等方法即可。这里在实
现自定义标签时,继承的 2 个类分别是 org.apache.struts2.views.jsp.ComponentTagSupport 和
org.apache.struts2.components.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.ComponentTagSupport
继承 ComponentTagSupport 类是为了获得标签中的属性值,并包装成 Component 对象。继承
Component 类是为了从 Struts2 中的 ValueStack 中获得相对应的值。
1.声明自定义标签。
首先,需要创建一个 tld 文件,这是一个标准的 XML 文件,这个文件中就包含有对自定义标签的声
明,声明指出了标签的名字,实现标签的类,标签的属性等信息。当在页面中使用该标签时,web
服务器就会从这个文件中找出相对应的标签类,并实例化后执行。这个文件其实与 struts.xml 文件的
作用相类似。
tangs.tld
Xml 代码
1. <?xmlversion="1.0"encoding="UTF-8"?>
2. <!DOCTYPEtaglibPUBLIC"-//SunMicrosystems,Inc.//DTDJSPTagLibrary1.2//EN""htt
p://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
1.
2. <taglib>
3. <tlib-version>2.2.3</tlib-version>
4. <jsp-version>1.2</jsp-version>
5. <short-name>tangs</short-name>
6. <uri>/tangs</uri>
7. <display-name>"TangsTags"</display-name>
8.
9. <tag>
10. <name>pages</name>
11. <tag-class>com.tangs.tag.PageTag</tag-class>//标签类 uu
12. <body-content>empty</body-content>
13. <attribute>//标签中的属性 uu
14. <name>cpage</name>//属性名 uu
15. <required>true</required>//是否必须 uu
16. <rtexprvalue>true</rtexprvalue>//表示该自定义标签的某属性的值可以直接指定或者通过动态
计算指定 uu
17. </attribute>
18. <attribute>
19. <name>total</name>
20. <required>true</required>
21. <rtexprvalue>true</rtexprvalue>
22. </attribute>
23. <attribute>
24. <name>url</name>
25. <required>true</required>
26. <rtexprvalue>true</rtexprvalue>
27. </attribute>
28. </tag>
29. </taglib>
2.编写标签类
PageTag.java
Java 代码
1. packagecom.tangs.tag;
2.
3. importcom.opensymphony.xwork2.util.ValueStack;
4. importjavax.servlet.http.HttpServletRequest;
5. importjavax.servlet.http.HttpServletResponse;
6. importorg.apache.struts2.components.Component;
7. importorg.apache.struts2.views.jsp.ComponentTagSupport;
8.
9. /**
10. *分页标签 u
11. *@authortangs
12. */
13. publicclassPageTagextendsComponentTagSupport{
14. privateStringcpage;//当前页 uu
15. privateStringtotal;//总页数 uu
16. privateStringurl;//请求地址 uu
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. @Override
31. publicComponentgetBean(ValueStackarg0,HttpServletRequestarg1,HttpServletResponsearg2){
32. returnnewPages(arg0);//返回 PagesComponent,分页的逻辑处理都在这个 Component 中 uu
33. }
34.
35. //获得参数 uu
36. protectedvoidpopulateParams(){
37. super.populateParams();
38.
39. Pagespages=(Pages)component;
40. pages.setCpage(cpage);
41. pages.setTotal(total);
42. pages.setUrl(url);
43. }
44. }
Pages.java
Java 代码
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. importorg.apache.struts2.components.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. @Override
49. publicbooleanstart(Writerwriter){
50. booleanresult=super.start(writer);
51. try{
剩余16页未读,继续阅读
lihang22222
- 粉丝: 3
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页