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. package javax.servlet.jsp.tagext;
  56. import javax.servlet.jsp.*;
  57. import javax.servlet.jsp.tagext.*;
  58. import javax.servlet.*;
  59. import java.io.Writer;
  60. import java.util.Hashtable;
  61. /**
  62. * A base class for defining tag handlers implementing BodyTag.
  63. *
  64. * <p>
  65. * The BodyTagSupport class implements the BodyTag interface and adds
  66. * additional convenience methods including getter methods for the
  67. * bodyContent property and methods to get at the previous out JspWriter.
  68. *
  69. * <p>
  70. * Many tag handlers will extend BodyTagSupport and only redefine a
  71. * few methods.
  72. */
  73. public class BodyTagSupport extends TagSupport implements BodyTag {
  74. /**
  75. * Default constructor, all subclasses are required to only define
  76. * a public constructor with the same signature, and to call the
  77. * superclass constructor.
  78. *
  79. * This constructor is called by the code generated by the JSP
  80. * translator.
  81. */
  82. public BodyTagSupport() {
  83. super();
  84. }
  85. /**
  86. * Default processing of the start tag returning EVAL_BODY_BUFFERED
  87. *
  88. * @return EVAL_BODY_BUFFERED;
  89. * @seealso BodyTag#doStartTag
  90. */
  91. public int doStartTag() throws JspException {
  92. return EVAL_BODY_BUFFERED;
  93. }
  94. /**
  95. * Default processing of the end tag returning EVAL_PAGE.
  96. *
  97. * @return EVAL_PAGE
  98. * @seealso Tag#doEndTag
  99. */
  100. public int doEndTag() throws JspException {
  101. return super.doEndTag();
  102. }
  103. // Actions related to body evaluation
  104. /**
  105. * Prepare for evaluation of the body: stash the bodyContent away.
  106. *
  107. * @param b the BodyContent
  108. * @seealso #doAfterBody
  109. * @seealso #doInitBody()
  110. * @seealso BodyTag#setBodyContent
  111. */
  112. public void setBodyContent(BodyContent b) {
  113. this.bodyContent = b;
  114. }
  115. /**
  116. * Prepare for evaluation of the body just before the first body evaluation:
  117. * no action.
  118. *
  119. * @seealso #setBodyContent
  120. * @seealso #doAfterBody
  121. * @seealso BodyTag#doInitBody
  122. */
  123. public void doInitBody() throws JspException {
  124. }
  125. /**
  126. * After the body evaluation: do not reevaluate and continue with the page.
  127. * By default nothing is done with the bodyContent data (if any).
  128. *
  129. * @return SKIP_BODY
  130. * @seealso #doInitBody
  131. * @seealso BodyTag#doAfterBody
  132. */
  133. public int doAfterBody() throws JspException {
  134. return SKIP_BODY;
  135. }
  136. /**
  137. * Release state.
  138. *
  139. * @seealso Tag#release
  140. */
  141. public void release() {
  142. bodyContent = null;
  143. super.release();
  144. }
  145. /**
  146. * Get current bodyContent.
  147. *
  148. * @return the body content.
  149. */
  150. public BodyContent getBodyContent() {
  151. return bodyContent;
  152. }
  153. /**
  154. * Get surrounding out JspWriter.
  155. *
  156. * @return the enclosing JspWriter, from the bodyContent.
  157. */
  158. public JspWriter getPreviousOut() {
  159. return bodyContent.getEnclosingWriter();
  160. }
  161. // protected fields
  162. protected BodyContent bodyContent;
  163. }