Mark Lundquist wrote:
On Aug 1, 2006, at 1:07 AM, Ard Schrijvers wrote:
I never used (saw :-) ) this createPageLocal untill now,
Huh, I sent a reply on this thread suggesting createPageLocal() last
week, oh well... :-)
and looked at http://cocoon.apache.org/2.1/userdocs/flow/api.html, but
I don't really get this one. You don't need a sendPageAndWait using
this one? Otherwise, the sendPageAndWait would hold the normal
continuation, right? I don't see what I gain with createPageLocal if
I still need a sendPageAndWait which creates a continuation. Could you
explain a little more, because I am very curious,
It's still a "normal continuation" created by sendPageAndWait. The
thing that is special is not the continuation, but the object.
var state = createPageLocal();
state.step = 'Step 1';
cocoon.sendPageAndWait('foo');
...
state.step = 'Step 2';
cocoon.sendPageAndWait ('bar');
Now if I hit the 'back' button after the second page, then continue from
the first page, when the first continuation is reinvoked then state.step
will have the value 'Step 1'. Does that example help?
Of course if state was declared like this:
var state = {}
so an "ordinary" variable then if the first continuation is reinvoked
the state.step will have the 'Step 2' value.
Simply speaking: page local is a special variable that has different
values in different continuations. This is both neat and dangerous in
terms of resource consumption.
BTW, resource considerations aside, you need "global"
(continuation-independent) state for things like being able to detect
when the user has re-submitted a form (e.g., the "Yes, charge my credit
card now!" form :-)
I know two ways of doing that:
1. simple one: redirect to a new page after the transaction has been
completed. This kills continuations continuity (and sucks) but saves you
from user pressing F5 and accidentaly resubmitting the whole form (and
reinvoking your transaction)
2. token based. Before you enter some form you generate a token that is
invalidated after transaction finishes. If user resubmits the form - the
token is already invalid and instead of rerunning the transaction the
user is informed that no action will take place.
Unfortunatelly there is no automatic support in cocoon for any of
solutions presented above.
--
Leszek Gawron [EMAIL PROTECTED]
IT Manager MobileBox sp. z o.o.
+48 (61) 855 06 67 http://www.mobilebox.pl
mobile: +48 (501) 720 812 fax: +48 (61) 853 29 65
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]