Regards,
Chris
Dmitri Plotnikov wrote:
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 <[EMAIL PROTECTED]> wrote:
It appears that XMLForm's use of JXPath is hardcoded to setting(http://cvs.apache.org/viewcvs.cgi/*checkout*/xml-cocoon2/src/java/org/apache/cocoon/components/xmlform/Form.java?rev=HEAD&content-type=text/plain)
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
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/