1 /* 2 * $Id: ELPutTag.java 471754 2006-11-06 14:55:09Z husted $ 3 * 4 * Licensed to the Apache Software Foundation (ASF) under one 5 * or more contributor license agreements. See the NOTICE file 6 * distributed with this work for additional information 7 * regarding copyright ownership. The ASF licenses this file 8 * to you under the Apache License, Version 2.0 (the 9 * "License"); you may not use this file except in compliance 10 * with the License. You may obtain a copy of the License at 11 * 12 * http://www.apache.org/licenses/LICENSE-2.0 13 * 14 * Unless required by applicable law or agreed to in writing, 15 * software distributed under the License is distributed on an 16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 * KIND, either express or implied. See the License for the 18 * specific language governing permissions and limitations 19 * under the License. 20 */ 21 package org.apache.strutsel.taglib.tiles; 22 23 import org.apache.struts.tiles.taglib.PutTag; 24 import org.apache.strutsel.taglib.utils.EvalHelper; 25 26 import javax.servlet.jsp.JspException; 27 28 /** 29 * <p>Put an attribute in enclosing attribute container tag. Enclosing 30 * attribute container tag can be : <insert> or <definition>. 31 * Exception is thrown if no appropriate tag can be found. Put tag can have 32 * following atributes :</p> 33 * 34 * <ul> 35 * 36 * <li>name : Name of the attribute</li> 37 * 38 * <li>value | content : value to put as attribute</li> 39 * 40 * <li>type : value type. Only valid if value is a String and is set by 41 * value="something" or by a bean. Possible type are : string (value is used 42 * as direct string), page | template (value is used as a page url to insert), 43 * definition (value is used as a definition name to insert)</li> 44 * 45 * <li>direct : Specify if value is to be used as a direct string or as a page 46 * url to insert. This is another way to specify the type. It only apply if 47 * value is set as a string, and type is not present.</li> 48 * 49 * <li>beanName : Name of a bean used for setting value. Only valid if value 50 * is not set. If property is specified, value come from bean's property. 51 * Otherwise, bean itself is used for value.</li> 52 * 53 * <li>beanProperty : Name of the property used for retrieving value.</li> 54 * 55 * <li>beanScope : Scope containing bean. </li> 56 * 57 * <li>role : Role to check when 'insert' will be called. If enclosing tag is 58 * <insert>, role is checked immediately. If enclosing tag is 59 * <definition>, role will be checked when this definition will be 60 * inserted.</li> 61 * 62 * </li> Value can also come from tag body. Tag body is taken into account 63 * only if value is not set by one of the tag attributes. In this case 64 * Attribute type is "string", unless tag body define another type.</li> 65 * 66 * </ul> 67 * 68 * <p> This class is a subclass of the class <code>org.apache.struts.taglib.tiles.PutTag</code> 69 * which provides most of the described functionality. This subclass allows 70 * all attribute values to be specified as expressions utilizing the 71 * JavaServer Pages Standard Library expression language. </p> 72 * 73 * @version $Rev: 471754 $ 74 */ 75 public class ELPutTag extends PutTag { 76 /** 77 * Instance variable mapped to "name" tag attribute. (Mapping set in 78 * associated BeanInfo class.) 79 */ 80 private String nameExpr; 81 82 /** 83 * Instance variable mapped to "value" tag attribute. (Mapping set in 84 * associated BeanInfo class.) 85 */ 86 private String valueExpr; 87 88 /** 89 * Instance variable mapped to "content" tag attribute. (Mapping set in 90 * associated BeanInfo class.) 91 */ 92 private String contentExpr; 93 94 /** 95 * Instance variable mapped to "direct" tag attribute. (Mapping set in 96 * associated BeanInfo class.) 97 */ 98 private String directExpr; 99 100 /** 101 * Instance variable mapped to "type" tag attribute. (Mapping set in 102 * associated BeanInfo class.) 103 */ 104 private String typeExpr; 105 106 /** 107 * Instance variable mapped to "beanName" tag attribute. (Mapping set in 108 * associated BeanInfo class.) 109 */ 110 private String beanNameExpr; 111 112 /** 113 * Instance variable mapped to "beanProperty" tag attribute. (Mapping set 114 * in associated BeanInfo class.) 115 */ 116 private String beanPropertyExpr; 117 118 /** 119 * Instance variable mapped to "beanScope" tag attribute. (Mapping set in 120 * associated BeanInfo class.) 121 */ 122 private String beanScopeExpr; 123 124 /** 125 * Instance variable mapped to "role" tag attribute. (Mapping set in 126 * associated BeanInfo class.) 127 */ 128 private String roleExpr; 129 130 /** 131 * Getter method for "name" tag attribute. (Mapping set in associated 132 * BeanInfo class.) 133 */ 134 public String getNameExpr() { 135 return (nameExpr); 136 } 137 138 /** 139 * Getter method for "value" tag attribute. (Mapping set in associated 140 * BeanInfo class.) 141 */ 142 public String getValueExpr() { 143 return (valueExpr); 144 } 145 146 /** 147 * Getter method for "content" tag attribute. (Mapping set in associated 148 * BeanInfo class.) 149 */ 150 public String getContentExpr() { 151 return (contentExpr); 152 } 153 154 /** 155 * Getter method for "direct" tag attribute. (Mapping set in associated 156 * BeanInfo class.) 157 */ 158 public String getDirectExpr() { 159 return (directExpr); 160 } 161 162 /** 163 * Getter method for "type" tag attribute. (Mapping set in associated 164 * BeanInfo class.) 165 */ 166 public String getTypeExpr() { 167 return (typeExpr); 168 } 169 170 /** 171 * Getter method for "beanName" tag attribute. (Mapping set in associated 172 * BeanInfo class.) 173 */ 174 public String getBeanNameExpr() { 175 return (beanNameExpr); 176 } 177 178 /** 179 * Getter method for "beanProperty" tag attribute. (Mapping set in 180 * associated BeanInfo class.) 181 */ 182 public String getBeanPropertyExpr() { 183 return (beanPropertyExpr); 184 } 185 186 /** 187 * Getter method for "beanScope" tag attribute. (Mapping set in associated 188 * BeanInfo class.) 189 */ 190 public String getBeanScopeExpr() { 191 return (beanScopeExpr); 192 } 193 194 /** 195 * Getter method for "role" tag attribute. (Mapping set in associated 196 * BeanInfo class.) 197 */ 198 public String getRoleExpr() { 199 return (roleExpr); 200 } 201 202 /** 203 * Setter method for "name" tag attribute. (Mapping set in associated 204 * BeanInfo class.) 205 */ 206 public void setNameExpr(String nameExpr) { 207 this.nameExpr = nameExpr; 208 } 209 210 /** 211 * Setter method for "value" tag attribute. (Mapping set in associated 212 * BeanInfo class.) 213 */ 214 public void setValueExpr(String valueExpr) { 215 this.valueExpr = valueExpr; 216 } 217 218 /** 219 * Setter method for "content" tag attribute. (Mapping set in associated 220 * BeanInfo class.) 221 */ 222 public void setContentExpr(String contentExpr) { 223 this.contentExpr = contentExpr; 224 } 225 226 /** 227 * Setter method for "direct" tag attribute. (Mapping set in associated 228 * BeanInfo class.) 229 */ 230 public void setDirectExpr(String directExpr) { 231 this.directExpr = directExpr; 232 } 233 234 /** 235 * Setter method for "type" tag attribute. (Mapping set in associated 236 * BeanInfo class.) 237 */ 238 public void setTypeExpr(String typeExpr) { 239 this.typeExpr = typeExpr; 240 } 241 242 /** 243 * Setter method for "beanName" tag attribute. (Mapping set in associated 244 * BeanInfo class.) 245 */ 246 public void setBeanNameExpr(String beanNameExpr) { 247 this.beanNameExpr = beanNameExpr; 248 } 249 250 /** 251 * Setter method for "beanProperty" tag attribute. (Mapping set in 252 * associated BeanInfo class.) 253 */ 254 public void setBeanPropertyExpr(String beanPropertyExpr) { 255 this.beanPropertyExpr = beanPropertyExpr; 256 } 257 258 /** 259 * Setter method for "beanScope" tag attribute. (Mapping set in associated 260 * BeanInfo class.) 261 */ 262 public void setBeanScopeExpr(String beanScopeExpr) { 263 this.beanScopeExpr = beanScopeExpr; 264 } 265 266 /** 267 * Setter method for "role" tag attribute. (Mapping set in associated 268 * BeanInfo class.) 269 */ 270 public void setRoleExpr(String roleExpr) { 271 this.roleExpr = roleExpr; 272 } 273 274 /** 275 * Resets attribute values for tag reuse. 276 */ 277 public void release() { 278 super.release(); 279 setNameExpr(null); 280 setValueExpr(null); 281 setContentExpr(null); 282 setDirectExpr(null); 283 setTypeExpr(null); 284 setBeanNameExpr(null); 285 setBeanPropertyExpr(null); 286 setBeanScopeExpr(null); 287 setRoleExpr(null); 288 } 289 290 /** 291 * Process the start tag. 292 * 293 * @throws JspException if a JSP exception has occurred 294 */ 295 public int doStartTag() throws JspException { 296 evaluateExpressions(); 297 298 return (super.doStartTag()); 299 } 300 301 /** 302 * Processes all attribute values which use the JSTL expression evaluation 303 * engine to determine their values. 304 * 305 * @throws JspException if a JSP exception has occurred 306 */ 307 private void evaluateExpressions() 308 throws JspException { 309 String string = null; 310 311 if ((string = 312 EvalHelper.evalString("name", getNameExpr(), this, pageContext)) != null) { 313 setName(string); 314 } 315 316 if ((string = 317 EvalHelper.evalString("value", getValueExpr(), this, pageContext)) != null) { 318 setValue(string); 319 } 320 321 if ((string = 322 EvalHelper.evalString("content", getContentExpr(), this, 323 pageContext)) != null) { 324 setContent(string); 325 } 326 327 if ((string = 328 EvalHelper.evalString("direct", getDirectExpr(), this, 329 pageContext)) != null) { 330 setDirect(string); 331 } 332 333 if ((string = 334 EvalHelper.evalString("type", getTypeExpr(), this, pageContext)) != null) { 335 setType(string); 336 } 337 338 if ((string = 339 EvalHelper.evalString("beanName", getBeanNameExpr(), this, 340 pageContext)) != null) { 341 setBeanName(string); 342 } 343 344 if ((string = 345 EvalHelper.evalString("beanProperty", getBeanPropertyExpr(), 346 this, pageContext)) != null) { 347 setBeanProperty(string); 348 } 349 350 if ((string = 351 EvalHelper.evalString("beanScope", getBeanScopeExpr(), this, 352 pageContext)) != null) { 353 setBeanScope(string); 354 } 355 356 if ((string = 357 EvalHelper.evalString("role", getRoleExpr(), this, pageContext)) != null) { 358 setRole(string); 359 } 360 } 361 }