View Javadoc

    1   /*
    2    * $Id: BaseFieldTag.java 684305 2008-08-09 17:43:00Z niallp $
    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.struts.taglib.html;
    22
    23  import org.apache.struts.taglib.TagUtils;
    24
    25  import javax.servlet.jsp.JspException;
    26
    27  /**
    28   * Convenience base class for the various input tags for text fields.
    29   *
    30   * @version $Rev: 684305 $ $Date: 2004-10-16 12:38:42 -0400 (Sat, 16 Oct 2004)
    31   *          $
    32   */
    33  public abstract class BaseFieldTag extends BaseInputTag {
    34      // ----------------------------------------------------- Instance Variables
    35
    36      /**
    37       * Comma-delimited list of content types that a server processing this
    38       * form will handle correctly.  This property is defined only for the
    39       * <code>file</code> tag, but is implemented here because it affects the
    40       * rendered HTML of the corresponding &lt;input&gt; tag.
    41       */
    42      protected String accept = null;
    43
    44      /**
    45       * The "redisplay contents" flag (used only on <code>password</code>).
    46       */
    47      protected boolean redisplay = true;
    48
    49      /**
    50       * The type of input field represented by this tag (text, password, or
    51       * hidden).
    52       */
    53      protected String type = null;
    54
    55      public String getAccept() {
    56          return (this.accept);
    57      }
    58
    59      public void setAccept(String accept) {
    60          this.accept = accept;
    61      }
    62
    63      public boolean getRedisplay() {
    64          return (this.redisplay);
    65      }
    66
    67      public void setRedisplay(boolean redisplay) {
    68          this.redisplay = redisplay;
    69      }
    70
    71      // --------------------------------------------------------- Public Methods
    72
    73      /**
    74       * Generate the required input tag. <p> Support for indexed property since
    75       * Struts 1.1
    76       *
    77       * @throws JspException if a JSP exception has occurred
    78       */
    79      public int doStartTag() throws JspException {
    80          TagUtils.getInstance().write(this.pageContext, this.renderInputElement());
    81
    82          return (EVAL_BODY_TAG);
    83      }
    84
    85      /**
    86       * Renders a fully formed &lt;input&gt; element.
    87       *
    88       * @throws JspException
    89       * @since Struts 1.2
    90       */
    91      protected String renderInputElement()
    92          throws JspException {
    93          StringBuffer results = new StringBuffer("<input");
    94
    95          prepareAttribute(results, "type", this.type);
    96          prepareAttribute(results, "name", prepareName());
    97          prepareAttribute(results, "accesskey", getAccesskey());
    98          prepareAttribute(results, "accept", getAccept());
    99          prepareAttribute(results, "maxlength", getMaxlength());
    100         prepareAttribute(results, "size", getCols());
    101         prepareAttribute(results, "tabindex", getTabindex());
    102         prepareValue(results);
    103         results.append(this.prepareEventHandlers());
    104         results.append(this.prepareStyles());
    105         if (!isXhtml()) {
    106             prepareAttribute(results, "autocomplete", getAutocomplete());
    107         }
    108         prepareOtherAttributes(results);
    109         results.append(this.getElementClose());
    110
    111         return results.toString();
    112     }
    113
    114     /**
    115      * Render the value element
    116      *
    117      * @param results The StringBuffer that output will be appended to.
    118      */
    119     protected void prepareValue(StringBuffer results)
    120         throws JspException {
    121         results.append(" value=\"");
    122
    123         if (value != null) {
    124             results.append(this.formatValue(value));
    125         } else if (redisplay || !"password".equals(type)) {
    126             Object value =
    127                 TagUtils.getInstance().lookup(pageContext, name, property, null);
    128
    129             results.append(this.formatValue(value));
    130         }
    131
    132         results.append('"');
    133     }
    134
    135     /**
    136      * Return the given value as a formatted <code>String</code>.  This
    137      * implementation escapes potentially harmful HTML characters.
    138      *
    139      * @param value The value to be formatted. <code>null</code> values will
    140      *              be returned as the empty String "".
    141      * @throws JspException if a JSP exception has occurred
    142      * @since Struts 1.2
    143      */
    144     protected String formatValue(Object value)
    145         throws JspException {
    146         if (value == null) {
    147             return "";
    148         }
    149
    150         return TagUtils.getInstance().filter(value.toString());
    151     }
    152
    153     /**
    154      * Release any acquired resources.
    155      */
    156     public void release() {
    157         super.release();
    158         accept = null;
    159         name = Constants.BEAN_KEY;
    160         redisplay = true;
    161     }
    162 }