Tag.java
上传用户:tanyanyong
上传日期:2013-06-23
资源大小:1355k
文件大小:7k
源码类别:

电子政务应用

开发平台:

MultiPlatform

  1. /*
  2.  * The Apache Software License, Version 1.1
  3.  *
  4.  * Copyright (c) 1999 The Apache Software Foundation.  All rights 
  5.  * reserved.
  6.  *
  7.  * Redistribution and use in source and binary forms, with or without
  8.  * modification, are permitted provided that the following conditions
  9.  * are met:
  10.  *
  11.  * 1. Redistributions of source code must retain the above copyright
  12.  *    notice, this list of conditions and the following disclaimer. 
  13.  *
  14.  * 2. Redistributions in binary form must reproduce the above copyright
  15.  *    notice, this list of conditions and the following disclaimer in
  16.  *    the documentation and/or other materials provided with the
  17.  *    distribution.
  18.  *
  19.  * 3. The end-user documentation included with the redistribution, if
  20.  *    any, must include the following acknowlegement:  
  21.  *       "This product includes software developed by the 
  22.  *        Apache Software Foundation (http://www.apache.org/)."
  23.  *    Alternately, this acknowlegement may appear in the software itself,
  24.  *    if and wherever such third-party acknowlegements normally appear.
  25.  *
  26.  * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software
  27.  *    Foundation" must not be used to endorse or promote products derived
  28.  *    from this software without prior written permission. For written 
  29.  *    permission, please contact apache@apache.org.
  30.  *
  31.  * 5. Products derived from this software may not be called "Apache"
  32.  *    nor may "Apache" appear in their names without prior written
  33.  *    permission of the Apache Group.
  34.  *
  35.  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  36.  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  37.  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  38.  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  39.  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  40.  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  41.  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  42.  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  43.  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  44.  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  45.  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  46.  * SUCH DAMAGE.
  47.  * ====================================================================
  48.  *
  49.  * This software consists of voluntary contributions made by many
  50.  * individuals on behalf of the Apache Software Foundation.  For more
  51.  * information on the Apache Software Foundation, please see
  52.  * <http://www.apache.org/>.
  53.  *
  54.  */ 
  55.  
  56. package javax.servlet.jsp.tagext;
  57. import javax.servlet.jsp.*;
  58. /**
  59.  * The Tag interface defines the basic protocol between a Tag handler and JSP page
  60.  * implementation class.  It defines the life cycle and the methods to be invoked at
  61.  * start and end tag.
  62.  * <p>
  63.  * There are several methods that get invoked to set the state of a Tag handler.
  64.  * The Tag handler is required to keep this state so the page compiler can
  65.  * choose not to reinvoke some of the state setting.
  66.  * <p>
  67.  * The page compiler guarantees that setPageContext and setParent
  68.  * will all be invoked on the Tag handler, in that order, before doStartTag() or
  69.  * doEndTag() are invoked on it.
  70.  * The page compiler also guarantees that release will be invoked on the Tag
  71.  * handler before the end of the page.
  72.  * <p>
  73.  * Here is a typical invocation sequence:
  74.  *
  75.  * <pre>
  76.  * <code>
  77.  * 
  78.  * ATag t = new ATag();
  79.  *
  80.  * -- need to set required information 
  81.  * t.setPageContext(...);
  82.  * t.setParent(...);
  83.  * t.setAttribute1(value1);
  84.  * t.setAttribute2(value2);
  85.  *
  86.  * -- all ready to go
  87.  * t.doStartTag();
  88.  * t.doEndTag();
  89.  * 
  90.  * ... other tags and template text
  91.  *
  92.  * -- say one attribute is changed, but parent and pageContext have not changed
  93.  * t.setAttribute2(value3);
  94.  * t.doStartTag()
  95.  * t.doEndTag()
  96.  *
  97.  * ... other tags and template text
  98.  *
  99.  * -- assume that this new action happens to use the same attribute values
  100.  * -- it is legal to reuse the same handler instance,  with no changes...
  101.  * t.doStartTag();
  102.  * t.doEndTag();
  103.  *
  104.  * -- OK, all done
  105.  * t.release()
  106.  * </code>
  107.  * </pre>
  108.  *
  109.  * <p>
  110.  * The Tag interface also includes methods to set a parent chain, which is used
  111.  * to find enclosing tag handlers.
  112.  *
  113.  */
  114. public interface Tag {
  115.     /**
  116.      * Skip body evaluation.
  117.      * Valid return value for doStartTag and doAfterBody.
  118.      */
  119.  
  120.     public final static int SKIP_BODY = 0;
  121.  
  122.     /**
  123.      * Evaluate body into existing out stream.
  124.      * Valid return value for doStartTag.
  125.      * This is an illegal return value for doStartTag when the class implements
  126.      * BodyTag, since BodyTag implies the creation of a new BodyContent.
  127.      */
  128.  
  129.     public final static int EVAL_BODY_INCLUDE = 1;
  130.     /**
  131.      * Skip the rest of the page.
  132.      * Valid return value for doEndTag.
  133.      */
  134.     public final static int SKIP_PAGE = 5;
  135.     /**
  136.      * Continue evaluating the page.
  137.      * Valid return value for doEndTag().
  138.      */
  139.     public final static int EVAL_PAGE = 6;
  140.     // Setters for Tag handler data
  141.     /**
  142.      * Set the current page context.
  143.      * Called by the page implementation prior to doStartTag().
  144.      * <p>
  145.      * This value is *not* reset by doEndTag() and must be explicitly reset
  146.      * by a page implementation
  147.      */
  148.     void setPageContext(PageContext pc);
  149.     /**
  150.      * Set the current nesting Tag of this Tag.
  151.      * Called by the page implementation prior to doStartTag().
  152.      * <p>
  153.      * This value is *not* reset by doEndTag() and must be explicitly reset
  154.      * by a page implementation.  Code can assume that setPageContext
  155.      * has been called with the proper values before this point.
  156.      */
  157.     void setParent(Tag t);
  158.     /**
  159.      * @return the current parent
  160.      * @seealso TagSupport.findAncestorWithClass().
  161.      */
  162.     Tag getParent();
  163.     // Actions for basic start/end processing.
  164.     /**
  165.      * Process the start tag for this instance.
  166.      *
  167.      * @returns EVAL_BODY_INCLUDE if the tag wants to process body, SKIP_BODY if it
  168.      * does not want to process it.
  169.      *
  170.      * When a Tag returns EVAL_BODY_INCLUDE the body (if any) is evaluated
  171.      * and written into the current "out" JspWriter then doEndTag() is invoked.
  172.      *
  173.      * @see BodyTag
  174.      */
  175.  
  176.     int doStartTag() throws JspException;
  177.  
  178.     /**
  179.      * Process the end tag. This method will be called on all Tag objects.
  180.      */
  181.     int doEndTag() throws JspException;
  182.     /**
  183.      * Called on a Tag handler to release state.
  184.      * The page compiler guarantees this method will be called on all tag handlers,
  185.      * but there may be multiple invocations on doStartTag and doEndTag in between.
  186.      */
  187.     void release();
  188. }