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]



Reply via email to