Manual Reference Pages - JIFTY::CONTINUATION (3)
Jifty::Continuation - Allows for basic continuation-based programming
In programming, a continuation is a construct that allows you to freeze the current state of a program and then recover that state later by calling the continuation. For example, you could save a continuation when throwing an exception to save the state, an exception handler could resolve the problem that caused the exception, and then call the continuation to resume execution at the point where the exception was thrown now that the problem has been solved.
In Jifty, continuations are used to save the state of a request (and sometimes the response). Continuations can be used in situations such as these:
Jifty::Continuation handles the details of saving this information for later recovery. When a continuation is saved, the current request and response are saved to the database in the current users session. When a continuation is called, the current request and response become those that were saved in the continuation. A continuation can be called at any point in the same session.
A user visits a page that requires login to view. The dispatcher saves a continuation and then sends the user off to the login page. Once the user logs in successfully, the login action can call the continuation to return the user back to the original page.
A blogging application might have a Edit link on each post to allow the editor to jump to the change page. If this link includes a saved continuation, then the Save button could trigger that continuation to be called to return the user back to the original page where they clicked Edit. This way, it could return the user to the view page, or a list page, or an administrative view depending on which page the user started the edit process from.
If you have a wizard for editing some information in your application, but entering some data may require jumping to another page you can save a continuation to allow the user to return after editing. If that page also requires a jump to yet another page, you can save another continuation. Since continuations save a stack of previous continuations, you can return twice to get back to the wizard.
Continuations store a Jifty::Request object and the
Jifty::Response object for the request. They can also store
arbitrary code to be run when the continuation is called.
Continuations can also be arbitrarily nested. This means that
returning from one continuation will drop you into the continuation
that is one higher in the stack.
Continuations are generally created just before their request would
take effect, activated by the presence of certain query parameters.
The rest of the request is saved, its execution is to be continued at a
Continuations are run after any actions have run. When a continuation
is run, it restores the request that it has saved away into it, and
pulls into that request the values any return values that were
specified when it was created. The continuations code block, if any,
is then called, and then the filled-in request is then passed to the
Saves a continuation at the current state. Possible arguments in the
A Jifty::Continuation object, or the id of one. This represents
the continuation that this continuation should return to when it is
called. Defaults to the current continuation of the current
The Jifty::Request object to save away. Defaults to an empty
The Jifty::Response object that will be loaded up when the
continuation is run. Most of the time, the response isnt stored in
the continuation, since the continuation was saved away <B>beforeB> the
actions got run. In the case when continuations are used to preserve
state across a redirect, however, we tuck the Jifty::Response value
of the previous request into the continuation as well. Defaults to an
empty Jifty::Response object.
An optional subroutine reference to evaluate when the continuation is
Returns true if the continuation matches the current requests path,
and it would return to its caller in this context. This can be used
to ask are we about to call a continuation?
Call the continuation; this is generally done during request
processing, after actions have been run.
Jifty::Request::Mapper-controlled values are filled into the stored
request based on the current request and response. During the
process, another continuation is created, with the filled-in results
of the current actions included, and the browser is redirected to the
proper path, with that continuation.
Returns from the continuation by pulling out the stored request, and
setting that to be the active request. This shouldnt need to be
called by hand use return_from_continuation in Jifty::Request,
which ensures that all requirements are met before it calls this.
Remove the continuation, and any continuations that would return to
its scope, from the session.
Jifty is Copyright 2005-2010 Best Practical Solutions, LLC.
Jifty is distributed under the same terms as Perl itself.
|perl v5.20.3 ||JIFTY::CONTINUATION (3) ||2010-12-10 |
Visit the GSP FreeBSD Man Page Interface.
Output converted with manServer 1.07.