开发带属性的标签:helloTagHaveProp
本实例中开发的标签在实例108的helloTag标签上作出改进,开发目标是在helloTag标签上增加两个属性fontSize和fontColor,fontSize用于设置字体大小,fontColor用于设置文字的颜色。
(1)第一步:开发标签实现类。
helloTagHaveProp.java package hello; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.TagSupport; public class helloTagHaveProp extends TagSupport { private String fontSize="3";//字体大小,默认3号 private String fontColor="#000000";//字体颜色,默认黑色 //----标签开始时调用此方法------- public int doStartTag(){ try{ JspWriter out=pageContext.getOut(); out.print("标签开始了。<font color=\""+fontColor + "\" size=\""+fontSize+"\">hello!</font>"); }catch(Exception e){ System.out.println(e); } return EVAL_BODY_INCLUDE; } //----标签结束时调用此方法------- public int doEndTag(){ try{ JspWriter out=pageContext.getOut(); out.print("标签结束了。"); }catch(Exception e){ System.out.println(e); } return EVAL_PAGE; } public String getFontColor() { return fontColor; } public void setFontColor(String fontColor) { this.fontColor = fontColor; } public String getFontSize() { return fontSize; } public void setFontSize(String fontSize) { this.fontSize = fontSize; } } |
(2)第二步:编写标签描述tld文件。这里在myTag.tld文件中增加内容,在<taglib>与</taglib>之间增加的内容如下:
<!-- helloTagHaveProp--> <tag> <!-- 标签名称--> <name>helloTagHaveProp</name> <!-- 标签对应的处理类--> <tag-class>hello.helloTagHaveProp</tag-class> <!-- 标签体内容,没有标签体则设为empty--> <body-content>empty</body-content> <!-- 标签的属性声明--> <attribute> <name>fontSize</name> <required>false</required> </attribute> <attribute> <name>fontColor</name> <required>false</required> </attribute> </tag> |
其中,name为属性的名称,required设置此属性是否必须设置,如果为true则在JSP页面中使用此标签时,必须给标签的这个属性赋值。
(3)第三步:在Web应用的web.xml文件中声明标签库引用。本例与实例108使用同一个tld文件,故不必再修改。
(4)第四步:在JSP页面中声明并调用标签。
useHelloTagHaveProp.jsp <%@ taglib uri="/myTag" prefix="myTag" %> <%@ page contentType="text/html;charset=GB2312" %> <html> <head> <title>一个简单的自定义标签</title> </head> <body> 下面是应用这个简单的自定义标签的结果:<br> <myTag:helloTagHaveProp fontSize="5"/><br> <myTag:helloTagHaveProp fontSize="4" fontColor="red"/> </body> </html> |
程序的运行结果如图13-3所示。
三、 开发带标签体的标签
要开发带标签体的标签,可实现BodyTag接口,也可从BodyTag接口的实现类BodyTagSupport继承,为简化开发,推荐从BodyTagSupport类继承开发。
编写标签对应的实现类时,需要重载BodyTagSupport类几个方法:doStartTag(), setBodyContent(), doInitBody(), doAfterBody(), doEndTag(),他们执行顺序如下:doStartTag()→doInitBody()→setBodyContent()→doAfterBody()→doEndTag()doStartTag()方法可返回EVAL_BODY_INCLUDE或SKIP_BODY,如果返回EVAL_BODY_ INCLUDE则继续执行;如果返回SKIP_BODY则接下来的doInitBody(),setBodyContent(), doAfterBody()三个方法不会被执行,而直接执行doEndTag()方法。
setBodyContent()方法用于设置标签体内容,如果在此之前要作一些初始化工作,则在doInitBody()方法中完成。标签体内容执行完后,会调用doAfterBody()方法,此方法可返回EVAL_BODY_TAG, SKIP_BODY,
EVAL_PAGE或SKIP_PAGE.如果返回EVAL_BODY_TAG则会再次设置标签体内容,直到返回SKIP_BODY;如果返回EVAL_PAGE则标签体执行完后会继续执行JSP页面中接下来的部分;如果返回SKIP_PAGE,则JSP页面的后续内容将不再执行。
[1] [2] [3] [4] 下一页