cocoon-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andreas Hochsteger <e9625...@student.tuwien.ac.at>
Subject Re: [cforms] Simple XML binding
Date Tue, 08 Jun 2004 17:38:05 GMT
Hi Daniel,

this sounds really interesting!

Would this functionality allow you to bind XML content to a textarea 
input element too?
What I mean is, that this way you could populate certain parts of an XML 
document directly with the XHTML-Output of the HTMLArea control (or 
plain textarea if you like).

Thanks,
Andreas.

Daniel Fagerstrom wrote:

> I have written an adapter: org.apache.cocoon.forms.util.XMLAdapter 
> between a form object and a simple XML format that can be used without 
> needing to wriite a binding definition.
> 
> In the applications where we have used cforms we mostly have connected 
> the form objects to XML through the binding framework. While the binding 
> framework has a lot of flexibility in how to bind the form to DOM, we 
> usually have used a more or less 1-1 coupling between DOM and the form. 
> So the flexibilty of the binding framework feels in our applications 
> like overkill and writing the bindings unnecessary.
> 
>                              --- o0o ---
> 
> The XML format is such that there is one XML element for each widget and 
> the element get the widget id as name. Exceptions from this is that the 
> elements in a repeater gets the name "item" and a attribute "position" 
> with the position of the repeater child, instead of just a number (which 
> is not allowed as element name). Childs of a MultiValueField are also 
> embeded within an "item" element. If the Form widget does not have an id 
> it get the name "unknown". I added the possiblity to give an id to the 
> Form widget.
> 
> An AggregateField can both be interpreted as one value and as several 
> widgets. This ambiguity is resolved by chosing to emit the single value 
> rather than the fields as XML. For population of the form both forms are 
> however allowed.
> 
> XMLAdapter implements XMLConsumer and XMLizable, so it can be used both 
> as a SAX source and destination. I added a utility function to forms.js: 
> getXML(), that returns the widget wrapped in an XMLAdapter. A typical 
> flowscript can look like:
> 
> function form2simpleXML(form) {
>     // get the documentURI parameter from the sitemap which contains the
>     // location of the file to be edited
>     var documentURI = cocoon.parameters["documentURI"];
> 
>     // get the XML adapter
>     var xmlAdapter = form.getXML();
> 
>     // parse the document to a widget tree
>     var pipeUtil =
> 
> cocoon.createObject(Packages.org.apache.cocoon.components.flow.util.PipelineUtil); 
> 
>     pipeUtil.processToSAX(documentURI, null, xmlAdapter);
> 
>     // show the form to the user until it is validated successfully
>     form.showForm("form2-display-pipeline");
> 
>     // show the xml generated from the form
>     cocoon.sendPage("form2simpleXML-success-pipeline", xmlAdapter);
> }
> 
> I also checked in a sample, (a variant of the binding sample), that show 
>  how to use the adapter.
> 
> WDYT?
> 
> /Daniel
> 
> 

Mime
View raw message