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