cocoon-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Neil Killick" <neil.kill...@publicimage.eu.com>
Subject Problem with repeater binding in CForm
Date Fri, 21 May 2004 02:55:29 GMT
Hi,

I'm having problems binding my JavaBean hierarchy to a CFORM. I am setting a default city
in my Address bean and it is not being mapped into the form once the form is loaded.

I have an Order bean which holds a collection (ArrayList) of Delivery beans. Each Delivery
bean holds an Address bean. I am just trying to set up one Delivery bean to map into the form
(i.e. I'm not adding rows, I'm just trying to get the first address to work).

I would really appreciate any help on this. Basically my binding is exactly the same as the
contact details example that ships with Cocoon (<cocoon-home>\src\blocks\forms\samples\forms\form2_bind_xml)
except I am going down to a deeper path (i.e. delivery/address). My binding is set up in the
flowscript:

function getOrderDeliveryForm() {
 var form = new Form("forms/orderDelivery.xml");
 form.createBinding("forms/orderDelivery-binding.xml"); 
 return form; 
}

Here is the other pertinent code and xml:

Flowscript

var form = getOrderDeliveryForm();
var order = new Packages.net.au.whirlwind.data.Order();  
var delivery = new Packages.net.au.whirlwind.data.Delivery();  
var address = new Packages.net.au.whirlwind.data.Address();
address.setCity("Melbourne");
delivery.setId(1);
delivery.setAddress(address);
order.addDelivery(delivery);

form.load(order);
form.showForm( "form-orderDelivery", {"view": param} );
form.save(order);

orderDelivery.xml

<?xml version="1.0"?>
<fd:form xmlns:fd="http://apache.org/cocoon/forms/1.0#definition" xmlns:i18n="http://apache.org/cocoon/i18n/2.1">
 <fd:widgets>
  <fd:repeater id="deliveries" initial-size="1">
   <fd:label>Delivery</fd:label>
   <fd:hint>this is a hint</fd:hint>
   <fd:help>this is some help</fd:help>
   <fd:widgets>
    <fd:output id="id">
          <fd:datatype base="long"/>
       </fd:output>
    <fd:field id="street" required="false">
     <fd:label>Street</fd:label>
     <fd:datatype base="string"/>
    </fd:field>
    <fd:field id="suburb" required="false">
     <fd:label>Suburb</fd:label>
     <fd:datatype base="string"/>
    </fd:field>
    <fd:field id="city" required="false">
     <fd:label>City</fd:label>
     <fd:datatype base="string"/>
    </fd:field>
    <fd:field id="state" required="false">
     <fd:label>State</fd:label>
     <fd:datatype base="string"/>
    </fd:field>
    <fd:field id="postcode" required="false">
     <fd:label>Postcode</fd:label>
     <fd:datatype base="string">
      <fd:converter type="plain"/>
     </fd:datatype>
     <fd:on-value-changed>
      <javascript>
       optionswidget = event.source.lookupWidget("../options");       
             optionswidget.setSelectionList( h.calcDeliveryOption(), "id", "name" );
          </javascript>
     </fd:on-value-changed>
    </fd:field>
    <fd:field id="country" required="false">
     <fd:label>Country</fd:label>
     <fd:datatype base="string"/>
    </fd:field>
    <fd:field id="options" required="false">
     <fd:label>Options:</fd:label>
     <fd:datatype base="string"/>
     <fd:selection-list>
      <fd:item value="">
       <fd:label>Select a postcode first</fd:label>
      </fd:item>
     </fd:selection-list>
    </fd:field>
    <fd:row-action id="delivery-remove" action-command="delete">
     <fd:label>remove</fd:label>
     <fd:help>help</fd:help>
     <fd:hint>hint</fd:hint>
    </fd:row-action>
   </fd:widgets>
  </fd:repeater>
  <fd:repeater-action id="delivery-add" action-command="add-row" repeater="delivery">
   <fd:label>add address</fd:label>
   <fd:help>help</fd:help>
   <fd:hint>hint</fd:hint>
  </fd:repeater-action>
 </fd:widgets>
</fd:form>

orderDelivery-binding.xml

<?xml version="1.0"?>
<fb:context xmlns:fb="http://apache.org/cocoon/forms/1.0#binding"
xmlns:fd="http://apache.org/cocoon/forms/1.0#definition" path="/">
 <fb:repeater id="deliveries" parent-path="deliveries" row-path="delivery">
  <fb:identity>
      <fb:value id="id" path="@id"/>
   </fb:identity>
  <fb:on-bind>
   <fb:value id="street" path="address/street"/>
   <fb:value id="suburb" path="address/suburb"/>
   <fb:value id="city" path="address/city"/>
   <fb:value id="state" path="address/state"/>
   <fb:value id="postcode" path="address/postCode"/>
   <fb:value id="country" path="address/country"/>
   <fb:value id="options" path="method"/>
  </fb:on-bind>
 </fb:repeater>
</fb:context>

I have also tried setting the parent-path to ".", again to no avail.

What am I doing wrong? Basically I don't get any errors, but "Melbourne" simply does not appear
in the city field.

Thanks in advance.

Regards, 
Neil Killick
------
Public Image
Creative Strategy & Production 
for Print, Online & Broadcast Media

Public Image Software
The SONART family of 
Management Information Systems
for the creative industries

Melbourne Studios:
Telephone +61 3 9650 0650
Facsimile +61 3 9650 0770

Mime
View raw message