craigmcc 02/01/17 13:26:18
Modified: src/share/org/apache/struts/action DynaActionFormClass.java
src/share/org/apache/struts/config FormPropertyConfig.java
Log:
Revision Changes Path
1.2 +5 -15
jakarta-struts/src/share/org/apache/struts/action/DynaActionFormClass.java
Index: DynaActionFormClass.java
===================================================================
RCS file:
/home/cvs/jakarta-struts/src/share/org/apache/struts/action/DynaActionFormClass.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- DynaActionFormClass.java 17 Jan 2002 00:15:05 -0000 1.1
+++ DynaActionFormClass.java 17 Jan 2002 21:26:18 -0000 1.2
@@ -1,7 +1,7 @@
/*
- * $Header:
/home/cvs/jakarta-struts/src/share/org/apache/struts/action/DynaActionFormClass.java,v
1.1 2002/01/17 00:15:05 craigmcc Exp $
- * $Revision: 1.1 $
- * $Date: 2002/01/17 00:15:05 $
+ * $Header:
/home/cvs/jakarta-struts/src/share/org/apache/struts/action/DynaActionFormClass.java,v
1.2 2002/01/17 21:26:18 craigmcc Exp $
+ * $Revision: 1.2 $
+ * $Date: 2002/01/17 21:26:18 $
*
* ====================================================================
*
@@ -82,7 +82,7 @@
* to consult this documentation.</p>
*
* @author Craig McClanahan
- * @version $Revision: 1.1 $ $Date: 2002/01/17 00:15:05 $
+ * @version $Revision: 1.2 $ $Date: 2002/01/17 21:26:18 $
* @since Struts 1.1
*/
@@ -341,19 +341,9 @@
// Create corresponding dynamic property definitions
properties = new DynaProperty[descriptors.length];
for (int i = 0; i < descriptors.length; i++) {
- // FIXME - special handling needed for arrays???
- Class clazz = null;
- try {
- // FIXME - thread context class loader?
- clazz = Class.forName(descriptors[i].getType());
- } catch (Throwable t) {
- throw new IllegalArgumentException
- ("Cannot instantiate property class '" +
- descriptors[i].getType() + "' for property '" +
- descriptors[i].getName() + "'");
- }
properties[i] =
- new DynaProperty(descriptors[i].getName(), clazz);
+ new DynaProperty(descriptors[i].getName(),
+ descriptors[i].getTypeClass());
propertiesMap.put(properties[i].getName(),
properties[i]);
}
1.3 +58 -4
jakarta-struts/src/share/org/apache/struts/config/FormPropertyConfig.java
Index: FormPropertyConfig.java
===================================================================
RCS file:
/home/cvs/jakarta-struts/src/share/org/apache/struts/config/FormPropertyConfig.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- FormPropertyConfig.java 17 Jan 2002 00:15:05 -0000 1.2
+++ FormPropertyConfig.java 17 Jan 2002 21:26:18 -0000 1.3
@@ -1,7 +1,7 @@
/*
- * $Header:
/home/cvs/jakarta-struts/src/share/org/apache/struts/config/FormPropertyConfig.java,v
1.2 2002/01/17 00:15:05 craigmcc Exp $
- * $Revision: 1.2 $
- * $Date: 2002/01/17 00:15:05 $
+ * $Header:
/home/cvs/jakarta-struts/src/share/org/apache/struts/config/FormPropertyConfig.java,v
1.3 2002/01/17 21:26:18 craigmcc Exp $
+ * $Revision: 1.3 $
+ * $Date: 2002/01/17 21:26:18 $
*
* ====================================================================
*
@@ -64,6 +64,7 @@
import java.io.Serializable;
+import java.lang.reflect.Array;
import org.apache.commons.beanutils.ConvertUtils;
@@ -73,7 +74,7 @@
* configuration file.<p>
*
* @author Craig R. McClanahan
- * @version $Revision: 1.2 $ $Date: 2002/01/17 00:15:05 $
+ * @version $Revision: 1.3 $ $Date: 2002/01/17 21:26:18 $
* @since Struts 1.1
*/
@@ -140,6 +141,59 @@
public void setType(String type) {
this.type = type;
}
+
+
+ /**
+ * Return a Class corresponds to the value specified for the
+ * <code>type</code> property, taking into account the trailing "[]"
+ * for arrays (as well as the ability to specify primitive Java types).
+ */
+ public Class getTypeClass() {
+
+ // Identify the base class (in case an array was specified)
+ String baseType = getType();
+ boolean indexed = false;
+ if (baseType.endsWith("[]")) {
+ baseType = baseType.substring(0, baseType.length() - 2);
+ indexed = true;
+ }
+
+ // Construct an appropriate Class instance for the base class
+ Class baseClass = null;
+ if ("boolean".equals(baseType)) {
+ baseClass = Boolean.TYPE;
+ } else if ("byte".equals(baseType)) {
+ baseClass = Byte.TYPE;
+ } else if ("char".equals(baseType)) {
+ baseClass = Character.TYPE;
+ } else if ("double".equals(baseType)) {
+ baseClass = Double.TYPE;
+ } else if ("float".equals(baseType)) {
+ baseClass = Float.TYPE;
+ } else if ("int".equals(baseType)) {
+ baseClass = Integer.TYPE;
+ } else if ("long".equals(baseType)) {
+ baseClass = Long.TYPE;
+ } else if ("short".equals(baseType)) {
+ baseClass = Short.TYPE;
+ } else {
+ // FIXME - thread context class loader?
+ try {
+ baseClass = Class.forName(baseType);
+ } catch (Throwable t) {
+ baseClass = null;
+ }
+ }
+
+ // Return the base class or an array appropriately
+ if (indexed) {
+ return (Array.newInstance(baseClass, 0).getClass());
+ } else {
+ return (baseClass);
+ }
+
+ }
+
// --------------------------------------------------------- Public Methods
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>