struts2自定义标签.docx

上传人:b****5 文档编号:5688927 上传时间:2022-12-31 格式:DOCX 页数:41 大小:37.52KB
下载 相关 举报
struts2自定义标签.docx_第1页
第1页 / 共41页
struts2自定义标签.docx_第2页
第2页 / 共41页
struts2自定义标签.docx_第3页
第3页 / 共41页
struts2自定义标签.docx_第4页
第4页 / 共41页
struts2自定义标签.docx_第5页
第5页 / 共41页
点击查看更多>>
下载资源
资源描述

struts2自定义标签.docx

《struts2自定义标签.docx》由会员分享,可在线阅读,更多相关《struts2自定义标签.docx(41页珍藏版)》请在冰豆网上搜索。

struts2自定义标签.docx

struts2自定义标签

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.  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  

java.lang.Object

extendedbyjavax.servlet.jsp.tagext.TagSupport

extendedbyjavax.servlet.jsp.tagext.BodyTagSupport

extendedbyorg.apache.struts2.views.jsp.StrutsBodyTagSupport

extendedbyorg.apache.struts2.views.jsp.ComponentTagSupport

 继承ComponentTagSupport类是为了获得标签中的属性值,并包装成Component对象。

继承Component类是为了从Struts2中的ValueStack中获得相对应的值。

1.声明自定义标签。

首先,需要创建一个tld文件,这是一个标准的XML文件,这个文件中就包含有对自定义标签的声明,声明指出了标签的名字,实现标签的类,标签的属性等信息。

当在页面中使用该标签时,web服务器就会从这个文件中找出相对应的标签类,并实例化后执行。

这个文件其实与struts.xml文件的作用相类似。

tangs.tld

Xml代码

1.

xml version="1.0" encoding="UTF-8"?

>  

2.

DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "  

1.

2.  

3.    2.2.3  

4.    1.2  

5.    tangs  

6.    /tangs  

7.    "Tangs Tags"  

8.      

9.          

10.            pages  

11.            com.tangs.tag.PageTag   //标签类  

12.            empty  

13.               //标签中的属性  

14.                cpage  //属性名  

15.                true  //是否必须  

16.                true  //表示该自定义标签的某属性的值可以直接指定或者通过动态计算指定  

17.              

18.              

19.                total  

20.                true  

21.                true  

22.              

23.              

24.                url  

25.                true  

26.                true  

27.              

28.          

29.  

xmlversion="1.0"encoding="UTF-8"?

>

DOCTYPEtaglibPUBLIC"-//SunMicrosystems,Inc.//DTDJSPTagLibrary1.2//EN""

2.2.3

1.2

tangs

/tangs

"TangsTags"

pages

com.tangs.tag.PageTag//标签类

empty

//标签中的属性

cpage//属性名

true//是否必须

true//表示该自定义标签的某属性的值可以直接指定或者通过动态计算指定

total

true

true

url

true

true

 2.编写标签类

PageTag.java

Java代码

1.package com.tangs.tag;  

2.  

3.import com.opensymphony.xwork2.util.ValueStack;  

4.import javax.servlet.http.HttpServletRequest;  

5.import javax.servlet.http.HttpServletResponse;  

6.import ponents.Component;  

7.import org.apache.struts2.views.jsp.ComponentTagSupport;  

8.  

9./** 

10. * 分页标签 

11. * @author tangs 

12. */  

13.public class PageTag extends ComponentTagSupport {  

14.    private String cpage;  //当前页  

15.    private String total;  //总页数  

16.    private String url;  //请求地址  

17.  

18.    public void setCpage(String cpage) {  

19.        this.cpage = cpage;  

20.    }  

21.  

22.    public void setTotal(String total) {  

23.        this.total = total;  

24.    }  

25.  

26.    public void setUrl(String url) {  

27.        this.url = url;  

28.    }  

29.  

30.    @Override  

31.    public Component getBean(ValueStack arg0, HttpServletRequest arg1, HttpServletResponse arg2) {  

32.        return new Pages(arg0); //返回Pages Component,分页的逻辑处理都在这个Component中  

33.    }  

34.  

35.    //获得参数  

36.    protected void populateParams() {  

37.        super.populateParams();  

38.          

39.        Pages pages = (Pages)component;  

40.        pages.setCpage(cpage);  

41.        pages.setTotal(total);  

42.        pages.setUrl(url);  

43.    }  

44.}  

packagecom.tangs.tag;

importcom.opensymphony.xwork2.util.ValueStack;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

importponents.Component;

importorg.apache.struts2.views.jsp.ComponentTagSupport;

/**

*分页标签

*@authortangs

*/

publicclassPageTagextendsComponentTagSupport{

privateStringcpage;//当前页

privateStringtotal;//总页数

privateStringurl;//请求地址

publicvoidsetCpage(Stringcpage){

this.cpage=cpage;

}

publicvoidsetTotal(Stringtotal){

this.total=total;

}

publicvoidsetUrl(Stringurl){

this.url=url;

}

@Override

publicComponentgetBean(ValueStackarg0,HttpServletRequestarg1,HttpServletResponsearg2){

returnnewPages(arg0);//返回PagesComponent,分页的逻辑处理都在这个Component中

}

//获得参数

protectedvoidpopulateParams(){

super.populateParams();

Pagespages=(Pages)component;

pages.setCpage(cpage);

pages.setTotal(total);

pages.setUrl(url);

}

}

   Pages.java

Java代码

1.package com.tangs.tag;  

2.  

3.import com.opensymphony.xwork2.util.ValueStack;  

4.import java.io.IOException;  

5.import java.io.Writer;  

6.import java.util.logging.Level;  

7.import java.util.logging.Logger;  

8.import ponents.Component;  

9.  

10./** 

11. * 分页逻辑Bean 

12. * @author tangs 

13. */  

14.public class Pages extends Component {  

15.    private String cpage;  

16.    private String total;  

17.    private String url;  

18.  

19.    public String getCpage() {  

20.        return cpage;  

21.    }  

22.  

23.    public void setCpage(String cpage) {  

24.        this.cpage = cpage;  

25.    }  

26.  

27.    public String getTotal() {  

28.        return total;  

29.    }  

30.  

31.    public void setTotal(String total) {  

32.        this.total = total;  

33.    }  

34.  

35.    public String getUrl() {  

36.        return url;  

37.    }  

38.  

39.    public void setUrl(String url) {  

40.        this.url = url;  

41.    }  

42.      

43.      

44.    public Pages(ValueStack arg0) {  

45.        super(arg0);  

46.    }  

47.  

48.    @Override  

49.    public boolean start(Writer writer) {  

50.        boolean result = super.start(writer);  

51.        try {  

52.            StringBuilder str = new StringBuilder();  

53.            boolean isValid = 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.                Integer cpageInt = 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("

95.                        str.append(url);  

96.                        str.append("?

cpage=1&total="+total+"&url="+url);  

97.                        str.append("'>[首页] 

98.                        str.append(url);  

99.                        str.append("?

cpage=" + (cpageInt - 1) + "&total=" + total+"&url="+url);  

100.                        str.append("'>[上一页] 

101.                        str.append(url);  

102.                        str.append("?

cpage=" + total + "&total=" + total+"&url="+url);  

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1