You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cocoon.apache.org by Christofer Dutz <du...@c-ware.de> on 2006/08/25 11:21:41 UTC

[CFORMS] Alternate Suggestion-List generation

Hi,

 

I would like to post an alternate way of generating suggestion lists. In our
current project we had the need of generating context-sensitive
suggestion-lists. 

Next to the context sensitivity, there were other things bothering us. While
debugging everything we had a look at what was actually happening: 

 

-          When the pipeline for generating the suggestion-list is called, 

o        the suggestion-list generator looks up the form and widget

o        the corresponding java-script block is executed on the widget:

*         Since the content of the suggestion-lists is the result of an
xquery, the first step was to do an xquery

*         The result of the xquery pipeline was loaded into a dom

*         that is walked through generating an array, which is returned to
the suggestion-list generator

o        that array is transformed to sax-events by the suggestion-list
generator

o        this sax stream is then flattened back to plain old ASCII text in
the usual pipeline definition for suggestion lists

 

A conversion nightmare.

 

After quite some time of trying we found a way simplifying the way
suggestion-lists content is generated and as an addition we get the benefit
of being able to generate context-sensitive suggestion-lists very easily:

 

The pipeline for generating the content:

                  <!-- Pipeline for creating the suggestion list content.

                        the parameter "filter" contains the current content
of 

                        the text field and "widget" the id of the currently
active 

                        widget. These are used in the initial xslt
generating the

                        query. -->

                  <map:match pattern="_cocoon/forms/suggest">

                        <!-- generate an xml stream of the current form
model with

                        element name set to the id of a widget and it's
content to 

                        the value. I had to use this, because otherwise it
was not

                        possible to create suggestion-lists that are context


sensitive. -->

                        <map:generate type="forms-content"/>

                        <!-- prepare a database-query using the current form
values

This is where the real logic is set … using request-parameters

For individual xslts depending on the widget id are also 

possible -->

                        <map:transform type="xslt-saxon"
src="selection-lists/suggestion-list-query.xslt"/>

                        <!-- execute the query -->

                        <map:transform type="sql"/>

                        <!-- thransform the query results to a
SELECTION-LIST (not

                        a suggestion-list) -->

                        <map:transform type="xslt-saxon"
src="selection-lists/suggestion-list-trans.xslt"/>

                        <!-- transform the selection-list to the primitive
array-form

                        the dojo component can operate on -->

                        <map:transform

 
src="resource://org/apache/cocoon/forms/resources/selection-list2json.xsl"/>

                        <!-- send it back as text -->

                        <map:serialize type="text"/>

                  </map:match>

 

 

Widget definition (As you can see … there is no difference between a simple
text-field and a suggestion-list):

            <fd:field id="lad_plz" required="">

                  <fd:label>PLZ:</fd:label>

                  <fd:datatype base="string"/>

                  <fd:validation>

                        <fd:length max="6">

                             <fd:failmessage>Die PLZ darf nur 6 Buchstaben
enthalten.</fd:failmessage>

                        </fd:length>

                  </fd:validation>

            </fd:field>

 

 

Widget template:

            <ft:widget-label id="lad_land" type="suggest"/>

 

The logic for generating the suggestion-list content is now wrapped up in
the selection-lists/suggestion-list-query.xslt query.

It was much easier understanding suggestion-lists this way.

 

Just wanted to share my ideas and maybe get some hints for improvements.

 

Regards,

Chris

 

[ c h r i s t o f e r   d u t z ]

 

IT-Berater

univativ GmbH & Co. KG

Robert-Bosch-Str. 7, 64293 Darmstadt

 

fon: 0 61 51 / 66 717 - 21

fax: 0 61 51 / 66 717 - 29

email: christofer.dutz@univativ.de

http://www.univativ.de

 

Darmstadt, Stuttgart, Karlsruhe, Düsseldorf