View Javadoc

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