1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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 }