cocoon-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Leszek Gawron <lgaw...@mobilebox.pl>
Subject Re: Weird Javascript error in continuations
Date Tue, 01 Aug 2006 20:38:45 GMT
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                                      lgawron@mobilebox.pl
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: users-unsubscribe@cocoon.apache.org
For additional commands, e-mail: users-help@cocoon.apache.org


Mime
View raw message