hello, Hugo, Marc I have tried the repeater with new resource from cvs, also I mean using string and long, but I get always the same exception. And I want to know whether the problem is from repeater handler or?
Thanks Jianyu > -----Urspr�ngliche Nachricht----- > Von: Marc Portier [SMTP:[EMAIL PROTECTED] > Gesendet am: Donnerstag, 18. September 2003 22:07 > An: [EMAIL PROTECTED] > Betreff: Re: Help about how to use Repeater--bean binding > > > > Hugo Burm wrote: > > > Hello Jianyu, > > > > Your unique-row-id (oid) must be a String. It is somewhere in the Woody > > documentation and there is a comment in the sources that some conversion > > routines should be added. The Long appears in your <wd:repeater> in the > form > > definition, and in your AddressBean Java class. > > > > Hugo > > > > Hugo, > > I've created a fix for the mentioned TODO's and am updating the samples > to include the long datatype to show off this new support for convertors > on the row_ID field of the repeaters. > > Maybe odd at first sight but the consequence of this is that if you have > a backend that is strongly typed (i.e. it produces Java Objects and > beans rather then the typical Strings of the XML backend) then one will > NOT NEED TO DEFINE the convertor. > > will check in right away, > Jianyu, could you verify that this is solving your problems? > > > regards, > -marc= > > > > >>-----Original Message----- > >>From: Jianyu Wang [mailto:[EMAIL PROTECTED] > >>Sent: Thursday, September 18, 2003 5:50 PM > >>To: [EMAIL PROTECTED] > >>Subject: Help about how to use Repeater--bean binding > >> > >> > >>hi, > >>I have a problem when I use repeater to add a new row in the > >>form and later > >>save it into bean. I get the Exception like these: > >> > >>org.apache.commons.jxpath.JXPathException: Exception trying to > >>create xpath > >>addresses[1]; org.apache.cocoon.woody.binding.InsertBeanJXP > >>athBinding.access$000(Lorg/apache/cocoon/woody/binding/InsertBeanJ > >>XPathBindi > >>ng;)Ljava/lang/String; > >> at > >>org.apache.commons.jxpath.ri.JXPathContextReferenceImpl.createPath > >>(JXPathCon > >>textReferenceImpl.java:420) > >> at > >>org.apache.commons.jxpath.ri.JXPathContextReferenceImpl.createPath > >>(JXPathCon > >>textReferenceImpl.java:397) > >> at > >>org.apache.cocoon.woody.binding.RepeaterJXPathBinding.saveFormToMo > >>del(Repeat > >>erJXPathBinding.java:233) > >> at > >>org.apache.cocoon.woody.binding.ComposedJXPathBindingBase.saveForm > >>ToModel(Co > >>mposedJXPathBindingBase.java:108) > >> at > >>org.apache.cocoon.woody.binding.ContextJXPathBinding.saveFormToMod > >>el(Context > >>JXPathBinding.java:107) > >> at > >>org.apache.cocoon.woody.binding.JXPathBindingBase.saveFormToModel( > >>JXPathBind > >>ingBase.java:115) > >> > >> > >>my form defination is : > >> > >> <wd:repeater id="addresses"> > >> <wd:output id="oid"> > >> <wd:datatype base="long"/> > >> </wd:output> > >> > >> <wd:field id="street" required="true"> > >> <wd:label><i18n:text>Street</i18n:text></wd:label> > >> <wd:datatype base="string"> > >> <wd:validation> > >> <wd:length min="2"/> > >> </wd:validation> > >> </wd:datatype> > >> </wd:field> > >> > >> <wd:booleanfield id="address-select"> > >> <wd:label>Select</wd:label> > >> </wd:booleanfield> > >> > >> </wd:repeater> > >> > >>and bind data like this: > >> > >> <wb:repeater id="addresses" > >> parent-path="." > >> row-path="addresses" > >> unique-row-id="oid" > >> unique-path="@oid" > >> > > >> <!-- important note: the row-path is used inside jxpath-createPath > >>context, > >> as a consequence it cannot have dependent children or > predicates > >>--> > >> > >> <wb:on-bind> > >> <!-- executed on updates AND right after the insert --> > >> <wb:value id="street" path="street"/> > >> </wb:on-bind> > >> > >> <wb:on-delete-row>--> > >> <!-- chose on of these to test --> > >> <!-- > >> <wb:set-attribute name="row-state" value="deleted" /> > >> --> > >> <wb:delete-node /> > >> </wb:on-delete-row> > >> > >> <wb:on-insert-row> > >> <wb:insert-bean > >> classname="com.imkenberg.bo.address.impl.AddressBean" > >> addmethod="addAddress"/> > >> </wb:on-insert-row> > >> </wb:repeater> > >> > >>And then the parent Bean has properties like this: > >>public abstract class DefaultPartyBean implements Party { > >> private Long oid; > >> private String email; > >> private String password; > >> protected List addresses = new LinkedList(); > >>and also methods. > >> public PartyAddress getAddress() > >> public void addAddress( PartyAddress address ) > >> public Iterator getAddressIterator() > >> public List getAddresses() > >> public void setAddresses( List addresses ) > >> > >>And the AddressBean is simplely like this: > >>public class AddressBean implements Address { > >> private Long oid; > >> private String city; > >> private String country; > >> private String houseNo; > >> private String zip; > >> private String street; > >> private long type; > >>with get and set methods. > >> > >>I am glad for your helping > >> > >>Thanks > >> > >>Jianyu > >> > > > > > > -- > Marc Portier http://outerthought.org/ > Outerthought - Open Source, Java & XML Competence Support Center > Read my weblog at http://radio.weblogs.com/0116284/ > [EMAIL PROTECTED] [EMAIL PROTECTED]
