1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17 package javax.servlet.jsp.tagext;
18
19 import javax.servlet.jsp.JspException;
20 import javax.servlet.jsp.JspWriter;
21
22 /**
23 * A base class for defining tag handlers implementing BodyTag.
24 *
25 * <p>
26 * The BodyTagSupport class implements the BodyTag interface and adds
27 * additional convenience methods including getter methods for the
28 * bodyContent property and methods to get at the previous out JspWriter.
29 *
30 * <p>
31 * Many tag handlers will extend BodyTagSupport and only redefine a
32 * few methods.
33 */
34
35 public class BodyTagSupport extends TagSupport implements BodyTag {
36
37 /**
38 * Default constructor, all subclasses are required to only define
39 * a public constructor with the same signature, and to call the
40 * superclass constructor.
41 *
42 * This constructor is called by the code generated by the JSP
43 * translator.
44 */
45
46 public BodyTagSupport() {
47 super();
48 }
49
50 /**
51 * Default processing of the start tag returning EVAL_BODY_BUFFERED.
52 *
53 * @return EVAL_BODY_BUFFERED
54 * @throws JspException if an error occurred while processing this tag
55 * @see BodyTag#doStartTag
56 */
57
58 public int doStartTag() throws JspException {
59 return EVAL_BODY_BUFFERED;
60 }
61
62
63 /**
64 * Default processing of the end tag returning EVAL_PAGE.
65 *
66 * @return EVAL_PAGE
67 * @throws JspException if an error occurred while processing this tag
68 * @see Tag#doEndTag
69 */
70
71 public int doEndTag() throws JspException {
72 return super.doEndTag();
73 }
74
75
76 // Actions related to body evaluation
77
78 /**
79 * Prepare for evaluation of the body: stash the bodyContent away.
80 *
81 * @param b the BodyContent
82 * @see #doAfterBody
83 * @see #doInitBody()
84 * @see BodyTag#setBodyContent
85 */
86
87 public void setBodyContent(BodyContent b) {
88 this.bodyContent = b;
89 }
90
91
92 /**
93 * Prepare for evaluation of the body just before the first body evaluation:
94 * no action.
95 *
96 * @throws JspException if an error occurred while processing this tag
97 * @see #setBodyContent
98 * @see #doAfterBody
99 * @see BodyTag#doInitBody
100 */
101
102 public void doInitBody() throws JspException {
103 }
104
105
106 /**
107 * After the body evaluation: do not reevaluate and continue with the page.
108 * By default nothing is done with the bodyContent data (if any).
109 *
110 * @return SKIP_BODY
111 * @throws JspException if an error occurred while processing this tag
112 * @see #doInitBody
113 * @see BodyTag#doAfterBody
114 */
115
116 public int doAfterBody() throws JspException {
117 return SKIP_BODY;
118 }
119
120
121 /**
122 * Release state.
123 *
124 * @see Tag#release
125 */
126
127 public void release() {
128 bodyContent = null;
129
130 super.release();
131 }
132
133 /**
134 * Get current bodyContent.
135 *
136 * @return the body content.
137 */
138
139 public BodyContent getBodyContent() {
140 return bodyContent;
141 }
142
143
144 /**
145 * Get surrounding out JspWriter.
146 *
147 * @return the enclosing JspWriter, from the bodyContent.
148 */
149
150 public JspWriter getPreviousOut() {
151 return bodyContent.getEnclosingWriter();
152 }
153
154 // protected fields
155
156 /**
157 * The current BodyContent for this BodyTag.
158 */
159 protected BodyContent bodyContent;
160 }