1 /* 2 * $Id: AbstractFacesTag.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 22 package org.apache.struts.faces.taglib; 23 24 25 import javax.faces.component.UIComponent; 26 import javax.faces.el.ValueBinding; 27 import javax.faces.webapp.UIComponentTag; 28 29 30 /** 31 * <p>Abstract base class for custom component tags for the 32 * <em>Struts-Faces Integration Library</em>.</p> 33 * 34 * 35 * @version $Rev: 471754 $ $Date: 2006-11-06 08:55:09 -0600 (Mon, 06 Nov 2006) $ 36 */ 37 38 public abstract class AbstractFacesTag extends UIComponentTag { 39 40 41 // ---------------------------------------------------------- Tag Attributes 42 43 44 /** 45 * <p>The servlet context attribute under which our 46 * <code>MessageResources</code> bundle is stored.</p> 47 */ 48 protected String bundle = null; 49 50 public void setBundle(String bundle) { 51 this.bundle = bundle; 52 } 53 54 55 /** 56 * <p>The CSS style(s) used to render this component.</p> 57 */ 58 protected String style = null; 59 60 public void setStyle(String style) { 61 this.style = style; 62 } 63 64 65 /** 66 * <p>The CSS style class(es) used to render this component.</p> 67 */ 68 protected String styleClass = null; 69 70 public void setStyleClass(String styleClass) { 71 this.styleClass = styleClass; 72 } 73 74 75 /** 76 * <p>The literal value to be rendered.</p> 77 */ 78 protected String value = null; 79 80 public void setValue(String value) { 81 this.value = value; 82 } 83 84 85 // ---------------------------------------------------------- Public Methods 86 87 88 /** 89 * <p>Return the component type of the component to be created for 90 * this tag.</p> 91 */ 92 public abstract String getComponentType(); 93 94 95 /** 96 * <p>Return the <code>rendererType</code> to be used for rendering 97 * our component.</p> 98 */ 99 public abstract String getRendererType(); 100 101 102 /** 103 * <p>Release any variables allocated during use of this tag instance.</p> 104 */ 105 public void release() { 106 107 super.release(); 108 this.bundle = null; 109 this.style = null; 110 this.styleClass = null; 111 this.value = null; 112 113 } 114 115 116 // -------------------------------------------------- UIComponentTag Methods 117 118 119 /** 120 * <p>Override attributes set on this tag instance.</p> 121 * 122 * @param component Component whose attributes should be overridden 123 */ 124 protected void setProperties(UIComponent component) { 125 126 super.setProperties(component); 127 setStringAttribute(component, "bundle", bundle); 128 setStringAttribute(component, "style", style); 129 setStringAttribute(component, "styleClass", styleClass); 130 setStringAttribute(component, "value", value); 131 132 } 133 134 135 // ------------------------------------------------------- Protected Methods 136 137 138 /** 139 * <p>If the specified attribute value is not <code>null</code> 140 * use it to either store a value binding expression for the 141 * specified attribute name, or store it as the literal value 142 * of the attribute.</p> 143 * 144 * @param component <code>UIComponent</code> whose attribute 145 * is to be set 146 * @param name Attribute name 147 * @param value Attribute value (or <code>null</code>) 148 * 149 * @exception NumberFormatException if the value does not 150 * contain a parsable integer 151 * @exception ReferenceSyntaxException if the expression has 152 * invalid syntax 153 */ 154 protected void setBooleanAttribute(UIComponent component, 155 String name, String value) { 156 157 if (value == null) { 158 return; 159 } 160 if (isValueReference(value)) { 161 ValueBinding vb = 162 getFacesContext().getApplication().createValueBinding(value); 163 component.setValueBinding(name, vb); 164 } else { 165 component.getAttributes().put(name, Boolean.valueOf(value)); 166 } 167 168 } 169 170 171 /** 172 * <p>If the specified attribute value is not <code>null</code> 173 * use it to either store a value binding expression for the 174 * specified attribute name, or store it as the literal value 175 * of the attribute.</p> 176 * 177 * @param component <code>UIComponent</code> whose attribute 178 * is to be set 179 * @param name Attribute name 180 * @param value Attribute value (or <code>null</code>) 181 * 182 * @exception NumberFormatException if the value does not 183 * contain a parsable integer 184 * @exception ReferenceSyntaxException if the expression has 185 * invalid syntax 186 */ 187 protected void setIntegerAttribute(UIComponent component, 188 String name, String value) { 189 190 if (value == null) { 191 return; 192 } 193 if (isValueReference(value)) { 194 ValueBinding vb = 195 getFacesContext().getApplication().createValueBinding(value); 196 component.setValueBinding(name, vb); 197 } else { 198 component.getAttributes().put(name, Integer.valueOf(value)); 199 } 200 201 } 202 203 204 /** 205 * <p>If the specified attribute value is not <code>null</code> 206 * use it to either store a value binding expression for the 207 * specified attribute name, or store it as the literal value 208 * of the attribute.</p> 209 * 210 * @param component <code>UIComponent</code> whose attribute 211 * is to be set 212 * @param name Attribute name 213 * @param value Attribute value (or <code>null</code>) 214 * 215 * @exception ReferenceSyntaxException if the expression has 216 * invalid syntax 217 */ 218 protected void setStringAttribute(UIComponent component, 219 String name, String value) { 220 221 if (value == null) { 222 return; 223 } 224 if (isValueReference(value)) { 225 ValueBinding vb = 226 getFacesContext().getApplication().createValueBinding(value); 227 component.setValueBinding(name, vb); 228 } else { 229 component.getAttributes().put(name, value); 230 } 231 232 } 233 }