View Javadoc

    1   /*
    2    * $Id: OptGroup.java 501746 2007-01-31 06:22:43Z mrdon $
    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.struts2.components;
    22
    23  import java.io.Writer;
    24  import java.util.ArrayList;
    25  import java.util.List;
    26
    27  import javax.servlet.http.HttpServletRequest;
    28  import javax.servlet.http.HttpServletResponse;
    29
    30  import org.apache.commons.logging.Log;
    31  import org.apache.commons.logging.LogFactory;
    32  import org.apache.struts2.views.annotations.StrutsTag;
    33  import org.apache.struts2.views.annotations.StrutsTagAttribute;
    34
    35  import com.opensymphony.xwork2.inject.Container;
    36  import com.opensymphony.xwork2.inject.Inject;
    37  import com.opensymphony.xwork2.util.ValueStack;
    38
    39  /***
    40   * <!-- START SNIPPET: javadoc -->
    41   *
    42   * Create a optgroup component which needs to resides within a select tag.
    43   *
    44   * <!-- END SNIPPET: javadoc -->
    45   *
    46   * <p/>
    47   *
    48   * <!-- START SNIPPET: notice -->
    49   *
    50   * This component is to be used within a  Select component.
    51   *
    52   * <!-- END SNIPPET: notice -->
    53   *
    54   * <p/>
    55   *
    56   * <pre>
    57   * <!-- START SNIPPET: example -->
    58   *
    59   * &lt;s:select label="My Selection"
    60   *            name="mySelection"
    61   *            value="%{'POPEYE'}"
    62   *            list="%{#{'SUPERMAN':'Superman', 'SPIDERMAN':'spiderman'}}"&gt;
    63   *    &lt;s:optgroup label="Adult"
    64   *                 list="%{#{'SOUTH_PARK':'South Park'}}" /&gt;
    65   *    &lt;s:optgroup label="Japanese"
    66   *                 list="%{#{'POKEMON':'pokemon','DIGIMON':'digimon','SAILORMOON':'Sailormoon'}}" /&gt;
    67   * &lt;/s:select&gt;
    68   *
    69   * <!-- END SNIPPET: example -->
    70   * </pre>
    71   *
    72   */
    73  @StrutsTag(name="optgroup", tldTagClass="org.apache.struts2.views.jsp.ui.OptGroupTag", description="Renders a Select Tag's OptGroup Tag")
    74  public class OptGroup extends Component {
    75
    76      public static final String INTERNAL_LIST_UI_BEAN_LIST_PARAMETER_KEY = "optGroupInternalListUiBeanList";
    77
    78      private static Log _log = LogFactory.getLog(OptGroup.class);
    79
    80      protected HttpServletRequest req;
    81      protected HttpServletResponse res;
    82
    83      protected ListUIBean internalUiBean;
    84
    85      public OptGroup(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
    86          super(stack);
    87          this.req = req;
    88          this.res = res;
    89          internalUiBean = new ListUIBean(stack, req, res) {
    90              protected String getDefaultTemplate() {
    91                  return "empty";
    92              }
    93          };
    94      }
    95
    96      @Inject
    97      public void setContainer(Container container) {
    98          container.inject(internalUiBean);
    99      }
    100
    101     public boolean end(Writer writer, String body) {
    102         Select select = (Select) findAncestor(Select.class);
    103         if (select == null) {
    104             _log.error("incorrect use of OptGroup component, this component must be used within a Select component",
    105                     new IllegalStateException("incorrect use of OptGroup component, this component must be used within a Select component"));
    106             return false;
    107         }
    108         internalUiBean.start(writer);
    109         internalUiBean.end(writer, body);
    110
    111         List listUiBeans = (List) select.getParameters().get(INTERNAL_LIST_UI_BEAN_LIST_PARAMETER_KEY);
    112         if (listUiBeans == null) {
    113             listUiBeans = new ArrayList();
    114         }
    115         listUiBeans.add(internalUiBean);
    116         select.addParameter(INTERNAL_LIST_UI_BEAN_LIST_PARAMETER_KEY, listUiBeans);
    117
    118         return false;
    119     }
    120
    121     @StrutsTagAttribute(description="Set the label attribute")
    122     public void setLabel(String label) {
    123         internalUiBean.setLabel(label);
    124     }
    125
    126     @StrutsTagAttribute(description="Set the disable attribute.")
    127     public void setDisabled(String disabled) {
    128         internalUiBean.setDisabled(disabled);
    129     }
    130
    131     @StrutsTagAttribute(description="Set the list attribute.")
    132     public void setList(String list) {
    133         internalUiBean.setList(list);
    134     }
    135
    136     @StrutsTagAttribute(description="Set the listKey attribute.")
    137     public void setListKey(String listKey) {
    138         internalUiBean.setListKey(listKey);
    139     }
    140
    141     @StrutsTagAttribute(description="Set the listValue attribute.")
    142     public void setListValue(String listValue) {
    143         internalUiBean.setListValue(listValue);
    144     }
    145 }