View Javadoc

    1   /*
    2    * $Id: CheckboxInterceptor.java 478625 2006-11-23 17:31:52Z wsmoak $
    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.interceptor;
    22
    23  import com.opensymphony.xwork2.ActionInvocation;
    24  import com.opensymphony.xwork2.interceptor.Interceptor;
    25
    26  import java.util.Map;
    27  import java.util.Set;
    28  import java.util.HashMap;
    29  import java.util.Iterator;
    30
    31  /***
    32   * <!-- START SNIPPET: description -->
    33   * Looks for a hidden identification field that specifies the original value of the checkbox.
    34   * If the checkbox isn't submitted, insert it into the parameters as if it was with the value
    35   * of 'false'.
    36   * <!-- END SNIPPET: description -->
    37   * <p/>
    38   * <!-- START SNIPPET: parameters -->
    39   * <ul><li>setUncheckedValue -
    40   * The default value of an unchecked box can be overridden by setting the 'uncheckedValue' property.
    41   * </li></ul>
    42   * <!-- END SNIPPET: parameters -->
    43   * <p/>
    44   * <!-- START SNIPPET: extending -->
    45   * <p/>
    46   * <!-- END SNIPPET: extending -->
    47   */
    48  public class CheckboxInterceptor implements Interceptor {
    49
    50      /*** Auto-generated serialization id */
    51      private static final long serialVersionUID = -586878104807229585L;
    52
    53      private String uncheckedValue = Boolean.FALSE.toString();
    54
    55      public void destroy() {
    56      }
    57
    58      public void init() {
    59      }
    60
    61      public String intercept(ActionInvocation ai) throws Exception {
    62          Map parameters = ai.getInvocationContext().getParameters();
    63          Map<String, String> newParams = new HashMap<String, String>();
    64          Set<String> keys = parameters.keySet();
    65          for (Iterator<String> iterator = keys.iterator(); iterator.hasNext();) {
    66              String key = iterator.next();
    67
    68              if (key.startsWith("__checkbox_")) {
    69                  String name = key.substring("__checkbox_".length());
    70
    71                  iterator.remove();
    72
    73                  // is this checkbox checked/submitted?
    74                  if (!parameters.containsKey(name)) {
    75                      // if not, let's be sure to default the value to false
    76                      newParams.put(name, uncheckedValue);
    77                  }
    78              }
    79          }
    80
    81          parameters.putAll(newParams);
    82
    83          return ai.invoke();
    84      }
    85
    86      /***
    87       * Overrides the default value for an unchecked checkbox
    88       *
    89       * @param uncheckedValue The uncheckedValue to set
    90       */
    91      public void setUncheckedValue(String uncheckedValue) {
    92          this.uncheckedValue = uncheckedValue;
    93      }
    94  }