View Javadoc

    1   /*
    2    * $Id: HeaderTag.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.struts.taglib.bean;
    22
    23  import org.apache.struts.taglib.TagUtils;
    24  import org.apache.struts.util.MessageResources;
    25
    26  import javax.servlet.http.HttpServletRequest;
    27  import javax.servlet.jsp.JspException;
    28  import javax.servlet.jsp.tagext.TagSupport;
    29
    30  import java.util.ArrayList;
    31  import java.util.Enumeration;
    32
    33  /**
    34   * Define a scripting variable based on the value(s) of the specified header
    35   * received with this request.
    36   *
    37   * @version $Rev: 471754 $ $Date: 2004-10-16 12:38:42 -0400 (Sat, 16 Oct 2004)
    38   *          $
    39   */
    40  public class HeaderTag extends TagSupport {
    41      /**
    42       * The message resources for this package.
    43       */
    44      protected static MessageResources messages =
    45          MessageResources.getMessageResources(
    46              "org.apache.struts.taglib.bean.LocalStrings");
    47
    48      // ------------------------------------------------------------- Properties
    49
    50      /**
    51       * The name of the scripting variable that will be exposed as a page scope
    52       * attribute.
    53       */
    54      protected String id = null;
    55
    56      /**
    57       * Return an array of header values if <code>multiple</code> is non-null.
    58       */
    59      protected String multiple = null;
    60
    61      /**
    62       * The name of the header whose value is to be exposed.
    63       */
    64      protected String name = null;
    65
    66      /**
    67       * The default value to return if no header of the specified name is
    68       * found.
    69       */
    70      protected String value = null;
    71
    72      public String getId() {
    73          return (this.id);
    74      }
    75
    76      public void setId(String id) {
    77          this.id = id;
    78      }
    79
    80      public String getMultiple() {
    81          return (this.multiple);
    82      }
    83
    84      public void setMultiple(String multiple) {
    85          this.multiple = multiple;
    86      }
    87
    88      public String getName() {
    89          return (this.name);
    90      }
    91
    92      public void setName(String name) {
    93          this.name = name;
    94      }
    95
    96      public String getValue() {
    97          return (this.value);
    98      }
    99
    100     public void setValue(String value) {
    101         this.value = value;
    102     }
    103
    104     // --------------------------------------------------------- Public Methods
    105
    106     /**
    107      * Retrieve the required property and expose it as a scripting variable.
    108      *
    109      * @throws JspException if a JSP exception has occurred
    110      */
    111     public int doStartTag() throws JspException {
    112         if (this.multiple == null) {
    113             this.handleSingleHeader();
    114         } else {
    115             this.handleMultipleHeaders();
    116         }
    117
    118         return SKIP_BODY;
    119     }
    120
    121     /**
    122      * Expose an array of header values.
    123      *
    124      * @throws JspException
    125      * @since Struts 1.2
    126      */
    127     protected void handleMultipleHeaders()
    128         throws JspException {
    129         ArrayList values = new ArrayList();
    130         Enumeration items =
    131             ((HttpServletRequest) pageContext.getRequest()).getHeaders(name);
    132
    133         while (items.hasMoreElements()) {
    134             values.add(items.nextElement());
    135         }
    136
    137         if (values.isEmpty() && (this.value != null)) {
    138             values.add(this.value);
    139         }
    140
    141         String[] headers = new String[values.size()];
    142
    143         if (headers.length == 0) {
    144             JspException e =
    145                 new JspException(messages.getMessage("header.get", name));
    146
    147             TagUtils.getInstance().saveException(pageContext, e);
    148             throw e;
    149         }
    150
    151         pageContext.setAttribute(id, values.toArray(headers));
    152     }
    153
    154     /**
    155      * Expose a single header value.
    156      *
    157      * @throws JspException
    158      * @since Struts 1.2
    159      */
    160     protected void handleSingleHeader()
    161         throws JspException {
    162         String value =
    163             ((HttpServletRequest) pageContext.getRequest()).getHeader(name);
    164
    165         if ((value == null) && (this.value != null)) {
    166             value = this.value;
    167         }
    168
    169         if (value == null) {
    170             JspException e =
    171                 new JspException(messages.getMessage("header.get", name));
    172
    173             TagUtils.getInstance().saveException(pageContext, e);
    174             throw e;
    175         }
    176
    177         pageContext.setAttribute(id, value);
    178     }
    179
    180     /**
    181      * Release all allocated resources.
    182      */
    183     public void release() {
    184         super.release();
    185         id = null;
    186         multiple = null;
    187         name = null;
    188         value = null;
    189     }
    190 }