1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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
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
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
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
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 }