View Javadoc

    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 }