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);