You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by gi...@apache.org on 2005/03/20 14:36:39 UTC

svn commit: r158326 - cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/binding/MultiValueJXPathBinding.java

Author: giacomo
Date: Sun Mar 20 05:36:38 2005
New Revision: 158326

URL: http://svn.apache.org/viewcvs?view=rev&rev=158326
Log:
enable multi-value fields to bind in both directions

Modified:
    cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/binding/MultiValueJXPathBinding.java

Modified: cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/binding/MultiValueJXPathBinding.java
URL: http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/binding/MultiValueJXPathBinding.java?view=diff&r1=158325&r2=158326
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/binding/MultiValueJXPathBinding.java (original)
+++ cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/binding/MultiValueJXPathBinding.java Sun Mar 20 05:36:38 2005
@@ -15,6 +15,7 @@
  */
 package org.apache.cocoon.forms.binding;
 
+import java.util.Collection;
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.Locale;
@@ -23,6 +24,7 @@
 import org.apache.cocoon.forms.datatype.convertor.Convertor;
 import org.apache.cocoon.forms.datatype.convertor.ConversionResult;
 import org.apache.cocoon.forms.formmodel.Widget;
+import org.apache.commons.jxpath.AbstractFactory;
 import org.apache.commons.jxpath.JXPathContext;
 import org.apache.commons.jxpath.Pointer;
 
@@ -102,6 +104,21 @@
         Object[] values = (Object[])widget.getValue();
 
         JXPathContext multiValueContext = jctx.getRelativeContext(jctx.createPath(this.multiValuePath));
+        multiValueContext.setFactory( new AbstractFactory() {
+            public boolean createObject(JXPathContext context, Pointer pointer,
+                                        Object parent, String name, int index) {
+                final Object o = context.getValue(name);
+                if( Collection.class.isAssignableFrom( o.getClass() ) ) {
+                    ((Collection)context.getValue(name)).add(null);
+                } else if( o.getClass().isArray() ) {
+                    // not yet supported
+                    return false;
+                } else {
+                    return false;
+                }
+                return true;
+            }
+        });
         // Delete all that is already present
         multiValueContext.removeAll(this.rowPath);