Author: sylvain
Date: Fri Mar 18 09:04:39 2005
New Revision: 158102
URL: http://svn.apache.org/viewcvs?view=rev&rev=158102
Log:
Add cleanup and restore hook on Form.showForm. This replaces and enhances the
"fun" parameter that was added recently but which is clearly not sufficient
because a form is often displayed more than once.
I know we're in code freeze, but the previous contract (added after 2.1.6) was
buggy.
Modified:
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/flow/javascript/Form.js
cocoon/branches/BRANCH_2_1_X/status.xml
Modified:
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/flow/javascript/Form.js
URL:
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/flow/javascript/Form.js?view=diff&r1=158101&r2=158102
==============================================================================
---
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/flow/javascript/Form.js
(original)
+++
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/flow/javascript/Form.js
Fri Mar 18 09:04:39 2005
@@ -85,27 +85,38 @@
}
/**
+ * Set a function that will be called when
+ */
+
+/**
* Manages the display of a form and its validation.
*
- * This uses some additionnal propertied on the form object :
+ * This uses some additionnal properties on the form object :
* - "locale" : the form locale (default locale is used if not set)
+ * - "cleanupHook": a function called after having sent the page displaying
the form. This is equivalent
+ * to the "fun" argument of sendPageAndWait(), which allows to perform
some cleanup when the pipeline
+ * has been processed. The function is called with a single parameter
which is the form it is attached to.
+ * - "restoreHook": a function called before processing the form when it has
been submitted by
+ * the browser. This allows to restore some environment that is needed
by the form processing.
+ * The function is called with a single parameter which is the form it
is attached to.
*
* On return, the calling code can check some properties to know the form
result :
* - "isValid" : true if the form was sucessfully validated
* - "submitId" : the id of the widget that triggered the form submit (can be
null)
*
* @parameter uri the page uri (like in cocoon.sendPageAndWait())
- * @parameter bizdata some business data for the view (like in
cocoon.sendPageAndWait()).
+ * @parameter viewdata some data for the view (like in
cocoon.sendPageAndWait()).
* The "{FormsPipelineConfig.CFORMSKEY}" and "locale" properties
are added to this object.
+ * @parameter ttl the time to live of the continuation used to display the form
*/
-Form.prototype.showForm = function(uri, bizData, fun, ttl) {
+Form.prototype.showForm = function(uri, viewdata, ttl) {
- if (bizData == undefined) bizData = new Object();
-
bizData[Packages.org.apache.cocoon.forms.transformation.FormsPipelineConfig.CFORMSKEY]
= this.form;
+ if (viewdata == undefined) viewdata = new Object();
+
viewdata[Packages.org.apache.cocoon.forms.transformation.FormsPipelineConfig.CFORMSKEY]
= this.form;
if (this.locale == null)
this.locale = java.util.Locale.getDefault();
- bizData["locale"] = this.locale;
+ viewdata["locale"] = this.locale;
// Keep the first continuation that will be created as the result of this
function
var result = null;
@@ -118,13 +129,17 @@
if (comingBack) {
// We come back to the bookmark: process the form
+
+ if (this.restoreHook) {
+ this.restoreHook(this);
+ }
var formContext = new
Packages.org.apache.cocoon.forms.FormContext(cocoon.request, this.locale);
- // Prematurely add the bizData as in the object model so that event
listeners can use it
+ // Prematurely add the viewdata as in the object model so that event
listeners can use it
// (the same is done by cocoon.sendPage())
// FIXME : hack needed because FOM doesn't provide access to the
object model
var objectModel =
org.apache.cocoon.components.ContextHelper.getObjectModel(this.avalonContext);
-
org.apache.cocoon.components.flow.FlowHelper.setContextObject(objectModel,
bizData);
+
org.apache.cocoon.components.flow.FlowHelper.setContextObject(objectModel,
viewdata);
finished = this.form.process(formContext);
if (finished) {
@@ -136,10 +151,13 @@
}
}
comingBack = true;
- cocoon.sendPage(uri, bizData, bookmark);
- if (fun && fun instanceof Function) {
- fun();
+ cocoon.sendPage(uri, viewdata, bookmark);
+
+ // Clean up after sending the page
+ if (this.cleanupHook) {
+ this.cleanupHook(this);
}
+
FOM_Cocoon.suicide();
}
Modified: cocoon/branches/BRANCH_2_1_X/status.xml
URL:
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/status.xml?view=diff&r1=158101&r2=158102
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/status.xml (original)
+++ cocoon/branches/BRANCH_2_1_X/status.xml Fri Mar 18 09:04:39 2005
@@ -322,14 +322,17 @@
<br/>
Form.js :
<ul>
- <li>added "fun" and "ttl" parameters to <code>Form.showForm()</code>,
which now has the exact
- same parameters as cocoon.sendPageAndWait().</li>
<li>the argument of <code>new Form(...)</code> can now be either a
String or a DOM Element.
Accepting an Element allows the use of any kind of dynamic process
to build the form
definition.</li>
<li><code>Form.showForm()</code> now uses a single continuation, which
saves memory and speeds
up processing by shortening the continuation chain when the user
has a long interaction
with the form.</li>
+ <li>"ttl" parameter added to <code>Form.showForm()</code>, which has
the same meaning as for cocoon.sendPageAndWait().</li>
+ <li>new "cleanupHook" property on Form: this is a function that is
called each time the form is displayed.
+ This is similar to the "fun" parameter of
cocoon.sendPageAndWait().</li>
+ <li>new "restoreHook" property on Form: this is a function that is
called each time the continuation is called back,
+ to restore if needed the execution environment before processing
the request.</li>
</ul>
<br/>
Actions: