Btw. I don't know why ClassCastException is catched if the type is explicitly checked using instanceof
Index: DynaActionForm.java
===================================================================
RCS file:
/home/cvspublic/jakarta-struts/src/share/org/apache/struts/action/DynaActionForm.java,v
retrieving revision 1.15
diff -u -r1.15 DynaActionForm.java
--- DynaActionForm.java 24 Apr 2004 06:37:00 -0000 1.15
+++ DynaActionForm.java 8 Jun 2004 04:06:27 -0000
@@ -447,25 +447,39 @@
* exists, but is not indexed
* @exception IndexOutOfBoundsException if the specified index
* is outside the range of the underlying property
+ * @exception UnsupportedOperationException if the specified property
+ * does not support setting a value to the specified index
*/
public void set(String name, int index, Object value) {
- Object prop = dynaValues.get(name);
- if (prop == null) {
- throw new NullPointerException
- ("No indexed value for '" + name + "[" + index + "]'");
- } else if (prop.getClass().isArray()) {
- Array.set(prop, index, value);
- } else if (prop instanceof List) {
- try {
- ((List) prop).set(index, value);
- } catch (ClassCastException e) {
- throw new ConversionException(e.getMessage());
- }
- } else {
- throw new IllegalArgumentException
- ("Non-indexed property for '" + name + "[" + index + "]'");
- }
+ Object prop = dynaValues.get(name);
+ if (prop == null) {
+ throw new NullPointerException
+ ("No indexed value for '" + name + "[" + index + "]'");
+ } else if (prop.getClass().isArray()) {
+ int length = Array.getLength(prop);
+ if (length <= index) {
+ Object tmp =
Array.newInstance(prop.getClass().getComponentType(), index + 1);
+ if (length > 0)
+ System.arraycopy(prop, 0, tmp, 0, length);
+ prop = tmp;
+ dynaValues.put(name, prop);
+ }
+ Array.set(prop, index, value);
+ } else if (prop instanceof List) {
+ try {
+ List list = (List) prop;
+ for (int i = list.size(); i <= index; i++) {
+ list.add(null);
+ }
+ list.set(index, value);
+ } catch (ClassCastException e) {
+ throw new ConversionException(e.getMessage());
+ }
+ } else {
+ throw new IllegalArgumentException
+ ("Non-indexed property for '" + name + "[" + index +
"]'");
+ }
}
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]

