View Javadoc

    1   /*
    2    * $Id: StrutsTypeConverter.java 471756 2006-11-06 15:01:43Z 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.struts2.util;
    22
    23  import java.util.Map;
    24
    25  import ognl.DefaultTypeConverter;
    26
    27  /***
    28   * <!-- START SNIPPET: javadoc -->
    29   *
    30   * Base class for type converters used in Struts. This class provides two abstract methods that are used to convert
    31   * both to and from strings -- the critical functionality that is core to Struts's type coversion system.
    32   *
    33   * <p/> Type converters do not have to use this class. It is merely a helper base class, although it is recommended that
    34   * you use this class as it provides the common type conversion contract required for all web-based type conversion.
    35   *
    36   * <p/> There's a hook (fall back method) called <code>performFallbackConversion</code> of which
    37   * could be used to perform some fallback conversion if <code>convertValue</code> method of this
    38   * failed. By default it just ask its super class (Ognl's DefaultTypeConverter) to do the conversion.
    39   *
    40   * <p/> To allow the framework to recognize that a conversion error has occurred, throw an XWorkException or
    41   * preferable a TypeConversionException.
    42   *
    43   * <!-- END SNIPPET: javadoc -->
    44   *
    45   */
    46  public abstract class StrutsTypeConverter extends DefaultTypeConverter {
    47      public Object convertValue(Map context, Object o, Class toClass) {
    48          if (toClass.equals(String.class)) {
    49              return convertToString(context, o);
    50          } else if (o instanceof String[]) {
    51              return convertFromString(context, (String[]) o, toClass);
    52          } else if (o instanceof String) {
    53              return convertFromString(context, new String[]{(String) o}, toClass);
    54          } else {
    55              return performFallbackConversion(context, o, toClass);
    56          }
    57      }
    58
    59      /***
    60       * Hook to perform a fallback conversion if every default options failed. By default
    61       * this will ask Ognl's DefaultTypeConverter (of which this class extends) to
    62       * perform the conversion.
    63       *
    64       * @param context
    65       * @param o
    66       * @param toClass
    67       * @return The fallback conversion
    68       */
    69      protected Object performFallbackConversion(Map context, Object o, Class toClass) {
    70          return super.convertValue(context, o, toClass);
    71      }
    72
    73
    74      /***
    75       * Converts one or more String values to the specified class.
    76       *
    77       * @param context the action context
    78       * @param values  the String values to be converted, such as those submitted from an HTML form
    79       * @param toClass the class to convert to
    80       * @return the converted object
    81       */
    82      public abstract Object convertFromString(Map context, String[] values, Class toClass);
    83
    84      /***
    85       * Converts the specified object to a String.
    86       *
    87       * @param context the action context
    88       * @param o       the object to be converted
    89       * @return the converted String
    90       */
    91      public abstract String convertToString(Map context, Object o);
    92  }