SimpleTagSupport 类

SimpleTagSupport类别顾名思义,就是可以处理一些简单的自订标签需求,它是在JSP2.0之后新增的类别,对于一些简单的自订标签页求,您可以继承它来实作标签处理类别,而不用为了处理一些TagSupport、BodyTagSuppourt类别中回传值的问题。

为了使用上的简单而降低了复杂性,另一方面就是SimpleTagSupport类别所处理的功能受了些限制,它只处理标签与本体,要不要显示本体文字取决于您,对于标签之后的页面则不在SimpleTagSupport处理的范围之内(虽然您还是可以使用forward之类的方式来决定要不要显示之后的页面,但直接实作TagSupport会更方便一些),另外SimpleTagSupport类别的本体文字不能设定为JSP,这也是使用SimpleTagSupport上的一些限制。

尽管有了一些限制,对于简单的自订标签需求,使用SimpleTagSupport还是比较容易的,它实作了SimpleTag介面,您只要重新定义doTag()方法就可以实作自订标签的处理,先来看一个简单的范例:

 

   *SimpleHelloTag.java

import java.io.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
 
public class SimpleHelloTag extends SimpleTagSupport{
    public voiddoTag()throwsJspException, IOException {
       JspWriter out =getJspContext().getOut();
       out.println("Hello!World!");
    }
}


假设在tld档中设定是这样的:

    *hello.tld

...
   <tag>
       <description>SimpleTag</description>
       <name>hello</name>
 
   <tag-class>onlyfun.caterpillar.SimpleHelloTag</tag-class>
       <body-content>empty</body-content>
   </tag>
...


则我们就可以在JSP网页中这么使用以显示一段Hello!World!文字:
<caterpillar:hello/>
 
当然要真正显示字串,别忘了web.xml中的设定与taglib的设定,前面已经说过好多次,不再重复了。

SimpleTagSupport预设不显示本体文字,如果您想要自订可以显示本体文字的标签,则可以这么撰写:

    *SimpleTextTag.java
 
import java.io.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
 
public class SimpleHelloTag extends SimpleTagSupport {
    public voiddoTag() throws JspException, IOException {
       JspFragmentfrag = getJspBody();

       frag.invoke(null);
    }
}


getJspBody()方法传回JspFragment物件,它包括了标签本体的相关讯息,使用invoke()方法可以将这些讯息写入指定的Writer中,如果设定为null,则预设写入getJspContext().getOut()取得的Writer,假设tld档是这样设定:

    *text.tld

...
   <tag>
       <description>SimpleTag</description>
       <name>showbody</name>
       <tag-class>demo.tags.SimpleTagText</tag-class>
       <body-content>tagdependent</body-content>
   </tag>
...


则可以在JSP网页中这么使用它,作用只是将本体文字再显示出来:
<caterpillar:showbody>
   显示这段文字。。。。
</caterpillar:showbody>

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值