自定义标签的使用

在开发JSP页面中,可能会需要额外的标签库,来简化,页面的开发流程。在此我们需要自定义标签,首先了解一下Tag类的继承关系

<Tag>自定义标签的使用_第1张图片


红线左边的是传统表情,其中流程都是表情的标签执行流程,右边是简单标签(就一个关键方法doTag)

一,首先从传统标签讲起:

JSPTag是一个空接口,只是一个标识性接口, Tag标签定义了

Method Summary 
 int doEndTag() 
     //     Process the end tag for this instance. 
 int doStartTag() 
       //   Process the start tag for this instance. 
 Tag getParent() 
     //     Get the parent (closest enclosing tag handler) for this tag handler.
 void release() 
    //      Called on a Tag handler to release state. 
 void setPageContext(PageContext pc) 
   //       Set the current page context. 
 void setParent(Tag t) 
   //       Set the parent (closest enclosing tag handler) of this tag handler.

这些方法是Tag标签的基本方法。 

其在页面中调用顺序为

<Tag>自定义标签的使用_第2张图片

传统标签是要驻留内存的。因此在开发中使用一定要注意。 并要对标签及时的进行release。

传统标签的方法执行过程为:

<Tag>自定义标签的使用_第3张图片

二, 简单标签。 简单标签,虽然 在初始化过程中和传统标签的初始化过程一一样的。但是简单标签没有那么多方法了

没有了  doStartTag  doEndtag方法,只有一个doTag取代。

                void doTag()//:遇到标签就执行。容器调用。
		void setJspBody(JspFragment jspBody)//:容器调用。传入标签的主体内容。这个方法是传统标签中所没有的。
		void setJspContext(JspContext pc)//:容器调用。传入PageContext对象。
		void setParent(JspTag parent)//:容器调用。传入父标签。

简单标签怎样获取到body中的值呢?在简单标签中,就提供了两个方法共我们选择

protected  JspFragment getJspBody() 
        //  Returns the body passed in by the container via setJspBody. 
protected  JspContext getJspContext() 
       //   Returns the page context passed in by the container via setJspContext.

下面那个方法是可以获取到JSPContext可以转换成pageContext获取其他对象使用的

上面那个方法是用来获取当前jsp片段的。可以用来获取当前body内的字符串。

因此可以通过JspFragment中的方法获取到body中的值。

StringWriter sw=new StringWriter();
JspFragment jf= getJspBody();
Jf.invoke(sw);

JspFragment中是无法直接获取到string的,只能通过写入到一个输出流中去,才能获取到,因此我们需要自己新建一个StringWriter的输出缓冲

值得注意的一点是,JspFragment.Inovke方法中的参数是可以为NULL的,如果为NULL则表示是jsp默认的out对象,是直接输出到页面上的。

因此在JspFragment输出到页面的方法也就是js.invoke(null);

当然,如果你doTag中如果什么都不写,也就等于你在传统标签中shipBody了。 页面什么也不会显示出来。

你可能感兴趣的:(自定义标签的使用)