Return-Path: Delivered-To: apmail-xml-cocoon-dev-archive@xml.apache.org Received: (qmail 2314 invoked by uid 500); 22 Feb 2003 16:09:51 -0000 Mailing-List: contact cocoon-dev-help@xml.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: list-post: Reply-To: cocoon-dev@xml.apache.org Delivered-To: mailing list cocoon-dev@xml.apache.org Delivered-To: moderator for cocoon-dev@xml.apache.org Received: (qmail 63469 invoked from network); 21 Feb 2003 21:39:40 -0000 Message-ID: <20030221213946.96475.qmail@web11704.mail.yahoo.com> Date: Fri, 21 Feb 2003 13:39:46 -0800 (PST) From: Dmitri Plotnikov Reply-To: dmitri@apache.org Subject: Re: Setting values in XMLForm (via JXPath) To: Christopher Oliver , ivelin@apache.org Cc: cocoon-dev@xml.apache.org In-Reply-To: <3E567838.2020701@verizon.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N Christopher, The answer to your question really depends on whether you want to replace an existing collection element or create a new one. To create and element, use createPathAndSetValue. To replace the textual contents of an existing element, simply use setValue() - Dmitri --- Christopher Oliver wrote: > It appears that XMLForm's use of JXPath is hardcoded to setting > indexed > values only on Java arrays and Collections (not DOM nodes or other > types > of JXPath nodes). I was attempting to use a JavaScript object as a > JXPath node, but ran into the below problem in Form.java > (http://cvs.apache.org/viewcvs.cgi/*checkout*/xml-cocoon2/src/java/org/apache/cocoon/components/xmlform/Form.java?rev=HEAD&content-type=text/plain) > > Dmitri, what is the proper way to set collection values in JXPath? > Should we be using createPathAndSetValue() here? > > Regards, > > Chris > > public void setValue(String xpath, Object[] values) { > > // // Dmitri Plotnikov's patch > // > // // if there are multiple values to set > // // (like in the selectMany case), > // // iterate over the array and set individual > values > // if ( values.length > 1 ) > // { > // Iterator iter = > jxcontext_.iteratePointers(xpath); > // for (int i = 0; i < values.length; i++ ) > // { > // Pointer ptr = (Pointer)iter.next(); > // ptr.setValue(values[i]); > // } > // } > // else > // { > // // This is supposed to do the right thing > // jxcontext_.setValue(xpath, values); > // } > // > > Pointer pointer = jxcontext_.getPointer(xpath); > Object property = pointer.getValue(); > // if there are multiple values to set > // (like in the selectMany case), > // iterate over the array and set individual values > > // when the instance property is array > if (property != null && > property.getClass().isArray()) { > Class componentType = > property.getClass().getComponentType(); > property = > java.lang.reflect.Array.newInstance( > componentType, > values.length); > java.lang.System.arraycopy(values, 0, > property, > 0, values.length); > pointer.setValue(property); > } else if (property instanceof Collection) { > Collection cl = (Collection) property; > cl.clear(); > cl.addAll(java.util.Arrays.asList(values)); > } > // otherwise set the value of the first element > // (and the only) from the values array > else { > pointer.setValue(values[0]); > } > } > > > __________________________________________________ Do you Yahoo!? Yahoo! Tax Center - forms, calculators, tips, more http://taxes.yahoo.com/