View Javadoc

1   /*
2    * $Id: ELOptionsTag.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.html;
22  
23  import org.apache.struts.taglib.html.OptionsTag;
24  import org.apache.strutsel.taglib.utils.EvalHelper;
25  
26  import javax.servlet.jsp.JspException;
27  
28  /**
29   * Tag for creating multiple <select> options from a collection.  The
30   * associated values displayed to the user may optionally be specified by a
31   * second collection, or will be the same as the values themselves.  Each
32   * collection may be an array of objects, a Collection, an Enumeration, an
33   * Iterator, or a Map. <b>NOTE</b> - This tag requires a Java2 (JDK 1.2 or
34   * later) platform. <p> This class is a subclass of the class
35   * <code>org.apache.struts.taglib.html.OptionsTag</code> which provides most
36   * of the described functionality.  This subclass allows all attribute values
37   * to be specified as expressions utilizing the JavaServer Pages Standard
38   * Library expression language.
39   *
40   * @version $Rev: 471754 $
41   */
42  public class ELOptionsTag extends OptionsTag {
43      /**
44       * Instance variable mapped to "collection" tag attribute. (Mapping set in
45       * associated BeanInfo class.)
46       */
47      private String collectionExpr;
48  
49      /**
50       * Instance variable mapped to "filter" tag attribute. (Mapping set in
51       * associated BeanInfo class.)
52       */
53      private String filterExpr;
54  
55      /**
56       * Instance variable mapped to "labelName" tag attribute. (Mapping set in
57       * associated BeanInfo class.)
58       */
59      private String labelNameExpr;
60  
61      /**
62       * Instance variable mapped to "labelProperty" tag attribute. (Mapping set
63       * in associated BeanInfo class.)
64       */
65      private String labelPropertyExpr;
66  
67      /**
68       * Instance variable mapped to "name" tag attribute. (Mapping set in
69       * associated BeanInfo class.)
70       */
71      private String nameExpr;
72  
73      /**
74       * Instance variable mapped to "property" tag attribute. (Mapping set in
75       * associated BeanInfo class.)
76       */
77      private String propertyExpr;
78  
79      /**
80       * Instance variable mapped to "style" tag attribute. (Mapping set in
81       * associated BeanInfo class.)
82       */
83      private String styleExpr;
84  
85      /**
86       * Instance variable mapped to "styleClass" tag attribute. (Mapping set in
87       * associated BeanInfo class.)
88       */
89      private String styleClassExpr;
90  
91      /**
92       * Getter method for "collection" tag attribute. (Mapping set in
93       * associated BeanInfo class.)
94       */
95      public String getCollectionExpr() {
96          return (collectionExpr);
97      }
98  
99      /**
100      * Getter method for "filter" tag attribute. (Mapping set in associated
101      * BeanInfo class.)
102      */
103     public String getFilterExpr() {
104         return (filterExpr);
105     }
106 
107     /**
108      * Getter method for "labelName" tag attribute. (Mapping set in associated
109      * BeanInfo class.)
110      */
111     public String getLabelNameExpr() {
112         return (labelNameExpr);
113     }
114 
115     /**
116      * Getter method for "labelProperty" tag attribute. (Mapping set in
117      * associated BeanInfo class.)
118      */
119     public String getLabelPropertyExpr() {
120         return (labelPropertyExpr);
121     }
122 
123     /**
124      * Getter method for "name" tag attribute. (Mapping set in associated
125      * BeanInfo class.)
126      */
127     public String getNameExpr() {
128         return (nameExpr);
129     }
130 
131     /**
132      * Getter method for "property" tag attribute. (Mapping set in associated
133      * BeanInfo class.)
134      */
135     public String getPropertyExpr() {
136         return (propertyExpr);
137     }
138 
139     /**
140      * Getter method for "style" tag attribute. (Mapping set in associated
141      * BeanInfo class.)
142      */
143     public String getStyleExpr() {
144         return (styleExpr);
145     }
146 
147     /**
148      * Getter method for "styleClass" tag attribute. (Mapping set in
149      * associated BeanInfo class.)
150      */
151     public String getStyleClassExpr() {
152         return (styleClassExpr);
153     }
154 
155     /**
156      * Setter method for "collection" tag attribute. (Mapping set in
157      * associated BeanInfo class.)
158      */
159     public void setCollectionExpr(String collectionExpr) {
160         this.collectionExpr = collectionExpr;
161     }
162 
163     /**
164      * Setter method for "filter" tag attribute. (Mapping set in associated
165      * BeanInfo class.)
166      */
167     public void setFilterExpr(String filterExpr) {
168         this.filterExpr = filterExpr;
169     }
170 
171     /**
172      * Setter method for "labelName" tag attribute. (Mapping set in associated
173      * BeanInfo class.)
174      */
175     public void setLabelNameExpr(String labelNameExpr) {
176         this.labelNameExpr = labelNameExpr;
177     }
178 
179     /**
180      * Setter method for "labelProperty" tag attribute. (Mapping set in
181      * associated BeanInfo class.)
182      */
183     public void setLabelPropertyExpr(String labelPropertyExpr) {
184         this.labelPropertyExpr = labelPropertyExpr;
185     }
186 
187     /**
188      * Setter method for "name" tag attribute. (Mapping set in associated
189      * BeanInfo class.)
190      */
191     public void setNameExpr(String nameExpr) {
192         this.nameExpr = nameExpr;
193     }
194 
195     /**
196      * Setter method for "property" tag attribute. (Mapping set in associated
197      * BeanInfo class.)
198      */
199     public void setPropertyExpr(String propertyExpr) {
200         this.propertyExpr = propertyExpr;
201     }
202 
203     /**
204      * Setter method for "style" tag attribute. (Mapping set in associated
205      * BeanInfo class.)
206      */
207     public void setStyleExpr(String styleExpr) {
208         this.styleExpr = styleExpr;
209     }
210 
211     /**
212      * Setter method for "styleClass" tag attribute. (Mapping set in
213      * associated BeanInfo class.)
214      */
215     public void setStyleClassExpr(String styleClassExpr) {
216         this.styleClassExpr = styleClassExpr;
217     }
218 
219     /**
220      * Resets attribute values for tag reuse.
221      */
222     public void release() {
223         super.release();
224         setCollectionExpr(null);
225         setFilterExpr(null);
226         setLabelNameExpr(null);
227         setLabelPropertyExpr(null);
228         setNameExpr(null);
229         setPropertyExpr(null);
230         setStyleExpr(null);
231         setStyleClassExpr(null);
232     }
233 
234     /**
235      * Process the start tag.
236      *
237      * @throws JspException if a JSP exception has occurred
238      */
239     public int doStartTag() throws JspException {
240         evaluateExpressions();
241 
242         return (super.doStartTag());
243     }
244 
245     /**
246      * Processes all attribute values which use the JSTL expression evaluation
247      * engine to determine their values.
248      *
249      * @throws JspException if a JSP exception has occurred
250      */
251     private void evaluateExpressions()
252         throws JspException {
253         String string = null;
254         Boolean bool = null;
255 
256         if ((string =
257                 EvalHelper.evalString("collection", getCollectionExpr(), this,
258                     pageContext)) != null) {
259             setCollection(string);
260         }
261 
262         if ((bool =
263                 EvalHelper.evalBoolean("filter", getFilterExpr(), this,
264                     pageContext)) != null) {
265             setFilter(bool.booleanValue());
266         }
267 
268         if ((string =
269                 EvalHelper.evalString("labelName", getLabelNameExpr(), this,
270                     pageContext)) != null) {
271             setLabelName(string);
272         }
273 
274         if ((string =
275                 EvalHelper.evalString("labelProperty", getLabelPropertyExpr(),
276                     this, pageContext)) != null) {
277             setLabelProperty(string);
278         }
279 
280         if ((string =
281                 EvalHelper.evalString("name", getNameExpr(), this, pageContext)) != null) {
282             setName(string);
283         }
284 
285         if ((string =
286                 EvalHelper.evalString("property", getPropertyExpr(), this,
287                     pageContext)) != null) {
288             setProperty(string);
289         }
290 
291         if ((string =
292                 EvalHelper.evalString("style", getStyleExpr(), this, pageContext)) != null) {
293             setStyle(string);
294         }
295 
296         if ((string =
297                 EvalHelper.evalString("styleClass", getStyleClassExpr(), this,
298                     pageContext)) != null) {
299             setStyleClass(string);
300         }
301 
302         // Note that in contrast to other elements which have "style" and
303         // "styleClass" attributes, this tag does not have a "styleId"
304         // attribute.  This is because this produces the "id" attribute, which
305         // has to be unique document-wide, but this tag can generate more than
306         // one "option" element.  Thus, the base tag, "Options" does not
307         // support this attribute.
308     }
309 }