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