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