cocoon-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Daniel McOrmond <dmcorm...@gmail.com>
Subject Remembering original request parameters when using flow
Date Thu, 03 Mar 2005 22:37:16 GMT
Is it better to 'remember' original request parameters as variables in
flowscript, or to pass them via hidden form fields through the
pipeline? The goal is for the next pipeline to have access to them.

Below are two examples. I've tried to be as succinct as possible. So,
you'll just have to use your imagination for the missing pieces. :)


Here's the first example, if I use variables within flow:

var foo = cocoon.request.getParameter("foo");
cocoon.sendPageAndWait("getUserInput");
cocoon.sendPage("displayResults", { foo: foo } );

<map:match pattern="getUserInput"/>
 <map:generate type="file" src="foo.xml"/>
 <map:transform type="xslt" src="bar.xsl"/>
 <map:serialize type="html"/>
</map:match>

/* HTML generated by the getUserInput pipeline */
<form action="68546a264d336f0b313a58595a704b024a2e7e8b.continuation">
 <input type="text" name="textField"/>
 <input type="submit"/>
</form>

/* After the user submits the form, the continuation picks up with
this final pipeline */
<map:match pattern="displayResults">
 <map:generate type="file" src="bar.xml"/>
 <map:transform type="xslt" src="baz.xsl">
  <map:parameter name="originalValueOfFooParameter"
value="{flow-attribute:foo}"/>
 </map:transform>
 <map:serialize type="html"/>
</map:match>

Of course, the JXTemplateGenerator, or any number of methods could be
used to inject the value of foo into the displayResults pipeline..




Here's the second example, if I use hidden form fields:

cocoon.sendPageAndWait("getUserInput");
cocoon.sendPage("displayResults");

/* The request generator provides the original value of the foo
parameter to the stylesheet */
<map:match pattern="getUserInput">
 <map:generate type="request"/>
 <map:transform type="xslt" src="foo.xsl"/>
 <map:serialize type="html"/>
</map:match>

/* HTML generated by the getUserInput pipeline */
<form action="32434378822575115d252d213251313e0f2d4e14.continuation">
 <input type="hidden" name="foo" value="whatever"/>
 <input type="text" name="textField"/>
 <input type="submit"/>
</form>

/* After the user submits the form, the continuation picks up with
this final pipeline */
<map:match pattern="displayResults">
 <map:generate type="request"/>
 <map:transform type="xslt" src="bar.xsl"/>
 <map:serialize type="html"/>
</map:match>





Now, I expect that the answer will be that I should use variables
within flowscript. I've seen that the flow tutorial and examples do
things this way.

The only thing I don't like about using flow variables, is that I have
to pass them all through when I call a sendPage or sendPageAndWait. In
this example, I only had one original parameter, but suppose I had 50?
Even worse, suppose that I don't know the names of each parameter, or
that the potential set of provided parameters is highly volitile.

The advantage to using hidden form fields, is that I can handle any
number of original parameters, and don't have to worry about what
they're named. The request generator gives me all that information for
free, and my stylesheet can transform them easily. The downsides of
this method is that all that data goes back and forth between client
and server, not to mention that it's cheesy and old-school.


What do you guys think?  ( Let me know if anything is not clear. )

-Daniel

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@cocoon.apache.org
For additional commands, e-mail: users-help@cocoon.apache.org


Mime
View raw message