首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

[jsp自定义标签二] jsp自定义标签属性和标签体

2012-11-06 
[jsp自定义标签2] jsp自定义标签属性和标签体jsp自定义标签——添加标签属性通过标签属性控制标签展示的样式

[jsp自定义标签2] jsp自定义标签属性和标签体

jsp自定义标签——添加标签属性


通过标签属性控制标签展示的样式,这使其目的之一。
在[jsp自定义标签1] jsp自定义标签的处理过程

中介绍了最基础的自定义标签的开发流程。在此基础上我们添加自定义标签的属性:

?

第一步:调整tld文件,为标签定义属性名称和相应的参数。

?

<tag>    <name>helloTag2</name>    <tag-class>com.fox.mytag.HelloMyTag2</tag-class>    <body-content>empty</body-content>    <attribute>    <name>fontColor</name>    <required>false</required>    </attribute>    <attribute>    <name>fontSize</name>    <required>false</required>    </attribute>    </tag>

?

?

第二步:调整handler类,为属性字段添加set、get方法。

?

package com.fox.mytag;import java.io.IOException;import javax.servlet.jsp.JspException;import javax.servlet.jsp.JspWriter;import javax.servlet.jsp.tagext.TagSupport;/** *  * @author huangfox * jsp自定义标签(标签属性) */public class HelloMyTag2 extends TagSupport {private String fontSize = "14px" ;private String fontColor = "red" ;@Overridepublic int doEndTag() throws JspException {JspWriter out = pageContext.getOut();try {out.print("do End Tag ");} catch (IOException e) {e.printStackTrace();}return super.doEndTag();}@Overridepublic int doStartTag() throws JspException {JspWriter out = pageContext.getOut();try {out.print("<font color=""+fontColor+"" size=""+fontSize+"">hello!</font>");} catch (IOException e) {e.printStackTrace();}return super.doStartTag();}public String getFontSize() {return fontSize;}public void setFontSize(String fontSize) {this.fontSize = fontSize;}public String getFontColor() {return fontColor;}public void setFontColor(String fontColor) {this.fontColor = fontColor;}}

?第三步:使用标签

?<f:helloTag2 fontColor="green" fontSize="30px"/>

?

------------------------------

?

自定义标签——添加标签体

要开发带标签体的标签,可实现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页面的后续内容将不再执行。

?

第一步:修改tld文件

<tag>    <name>helloTag3</name>    <tag-class>com.fox.mytag.HelloMyTag3</tag-class>    <body-content>JSP</body-content>    <attribute>    <name>times</name>    <required>true</required>    </attribute>    </tag>
?

第二步:调整handler class

package com.fox.mytag;import java.io.IOException;import javax.servlet.jsp.JspException;import javax.servlet.jsp.JspWriter;import javax.servlet.jsp.tagext.BodyTagSupport;public class HelloMyTag3 extends BodyTagSupport   {private int times ;@Overridepublic int doStartTag() throws JspException {JspWriter out = pageContext.getOut();try {out.print("标签开始");if(times<0)return SKIP_BODY ;elsereturn EVAL_BODY_INCLUDE ; } catch (IOException e) {e.printStackTrace();return SKIP_BODY ;}}//@Overridepublic int doAfterBody() throws JspException {//JspWriter out = pageContext.getOut();if (times>0) {times--;return EVAL_BODY_AGAIN;}elsereturn SKIP_BODY ;}@Overridepublic int doEndTag() throws JspException {JspWriter out = pageContext.getOut();try {out.print("标签结束");} catch (IOException e) {e.printStackTrace();}return EVAL_PAGE ;}//public int getTimes() {return times;}public void setTimes(int times) {this.times = times;}}
?

第三步:使用标签

<f:helloTag3 times="5">     这个就是标签体的内容。。。<br>     </f:helloTag3>

?

?

?

?

?

?

热点排行
Bad Request.