Author(s)Jonathan Locke, Eelco Hillenius, Igor Vaynberg (ivaynberg)
THIS CLASS IS DELIBERATELY NOT INSTANTIABLE BY FRAMEWORK CLIENTS AND IS NOT
INTENDED TO BE SUBCLASSED BY FRAMEWORK CLIENTS.
Represents the request cycle, including the applicable application, page,
request, response and session.
Convenient container for an application, session, request and response object
for a page request cycle. Each of these properties can be retrieved with the
corresponding getter method. In addition, getPage and setPage can be used to
access the page property of the RequestCycle, which determines what page is
rendered back to the requester. The setRedirect() method determines if the
page should be rendered directly back to the browser or if the browser should
instead be redirected to the page (which then renders itself). The actual
rendering of the cycle's page is an implementation detail and occurs when the
render() method of RequestCycle is called by the framework. The render()
method is only public to allow invocation from implementation packages and
should never be called directly by clients of the framework.
The abstract urlFor() methods are implemented by subclasses of RequestCycle
and return encoded page URLs. The URL returned depends on the kind of page
being linked to. Pages broadly fall into two categories:
1.
A page that does not yet exist in a user Session may be encoded as a URL
that references the not-yet-created page by class name. A set of
PageParameters can also be encoded into the URL, and these parameters will be
passed to the page constructor if the page later needs to be instantiated.
Any page of this type is bookmarkable, and a hint to that effect is given to
the user in the URL:
Bookmarkable pages must either implement a constructor that takes a
PageParameters argument or a default constructor. If a Page has both
constructors the constuctor with the PageParameters argument will be used.
Links to bookmarkable pages are created by calling the urlFor(Class,
PageParameters) method, where Class is the page class and PageParameters are
the parameters to encode into the URL.
2.
Stateful pages (that have already been requested by a user) will be
present in the user's Session and can be referenced securely with a
session-relative number:
Often, the reason to access an existing session page is due to some kind of
"postback" (either a link click or a form submit) from a page (possibly
accessed with the browser's back button or possibly not). A call to a
registered listener is dispatched like so:
URLs for stateful pages (those that already exist in the session map) are
created by calling the urlFor(Component, Class) method, where Component is
the component being linked to and Class is the interface on the component to
call.
For pages falling into the second category, listener interfaces cannot be
invoked unless they have first been registered via the static
registerSecureInterface() method. This method ensures basic security by
restricting the set of interfaces that outsiders can call via GET and POST
requests. Each listener interface has a single method which takes only a
RequestCycle parameter. Currently, the following classes register the
following kinds of listener interfaces:
Class
Interface
Purpose
Form
IFormSubmitListener
Handle form submits
Image
IResourceListener
Respond to image resource requests
Link
ILinkListener
Respond to link clicks
Page
IRedirectListener
Respond to redirects
The redirectToInterceptPage() and continueToOriginalDestination() methods can
be used to temporarily redirect a user to some page. This is mainly intended
for use in signing in users who have bookmarked a page inside a site that
requires the user be authenticated before they can access the page. When it
is discovered that the user is not signed in, the user is redirected to the
sign-in page with redirectToInterceptPage(). When the user has signed in,
they are sent on their way with continueToOriginalDestination(). These
methods could also be useful in "interstitial" advertising or other kinds of
"intercepts".
Represents the request cycle, including the applicable application, page, request, response and session.
Convenient container for an application, session, request and response object for a page request cycle. Each of these properties can be retrieved with the corresponding getter method. In addition, getPage and setPage can be used to access the page property of the RequestCycle, which determines what page is rendered back to the requester. The setRedirect() method determines if the page should be rendered directly back to the browser or if the browser should instead be redirected to the page (which then renders itself). The actual rendering of the cycle's page is an implementation detail and occurs when the render() method of RequestCycle is called by the framework. The render() method is only public to allow invocation from implementation packages and should never be called directly by clients of the framework.
The abstract urlFor() methods are implemented by subclasses of RequestCycle and return encoded page URLs. The URL returned depends on the kind of page being linked to. Pages broadly fall into two categories:
Any page of this type is bookmarkable, and a hint to that effect is given to the user in the URL:
/[Application]?bookmarkablePage=[classname]&[param]=[value] [...]
Bookmarkable pages must either implement a constructor that takes a PageParameters argument or a default constructor. If a Page has both constructors the constuctor with the PageParameters argument will be used. Links to bookmarkable pages are created by calling the urlFor(Class, PageParameters) method, where Class is the page class and PageParameters are the parameters to encode into the URL.
/[Application]?wicket:interface=[pageMapName]:[pageId]: ...
Often, the reason to access an existing session page is due to some kind of "postback" (either a link click or a form submit) from a page (possibly accessed with the browser's back button or possibly not). A call to a registered listener is dispatched like so:
/[Application]?wicket:interface=[pageMapName]:[pageId]:[componentPath]:[version]:[interfaceName]
For example:
/[Application]?wicket:interface=:3:signInForm:submit::IFormSubmitListener
URLs for stateful pages (those that already exist in the session map) are created by calling the urlFor(Component, Class) method, where Component is the component being linked to and Class is the interface on the component to call.
For pages falling into the second category, listener interfaces cannot be invoked unless they have first been registered via the static registerSecureInterface() method. This method ensures basic security by restricting the set of interfaces that outsiders can call via GET and POST requests. Each listener interface has a single method which takes only a RequestCycle parameter. Currently, the following classes register the following kinds of listener interfaces:
The redirectToInterceptPage() and continueToOriginalDestination() methods can be used to temporarily redirect a user to some page. This is mainly intended for use in signing in users who have bookmarked a page inside a site that requires the user be authenticated before they can access the page. When it is discovered that the user is not signed in, the user is redirected to the sign-in page with redirectToInterceptPage(). When the user has signed in, they are sent on their way with continueToOriginalDestination(). These methods could also be useful in "interstitial" advertising or other kinds of "intercepts".