Dear Wiki user,
You have subscribed to a wiki page or wiki category on "Struts Wiki" for change
notification.
The "RolloverScope" page has been changed by Bill McCarty:
http://wiki.apache.org/struts/RolloverScope?action=diff&rev1=12&rev2=13
Attention! This page describes a feature that has not been implemented yet!
= Rollover Scope for Struts 1.x =
-
- Traditionally web applications use to store state information either in in
the HTTP request or in the HTTP session.
+ Traditionally web applications use to store state information either in in
the HTTP request or in the HTTP session.
If request object is used, state is usually serialized to HTML page as part
of HTML FORM. In this case moving back and forward along page history changes
the state. Consider implementing an online store checkout service, using
request object to store state. After a customer payed for goods, he can click
Back button and pay again. To prevent this kind of error a token or similar
facility should be used.
@@ -17, +16 @@
{{attachment:rollover.gif}}
== Rollover scope in a nutshell ==
-
A rollover scope is essentially a map stored within session scope. One
session object can store several associated rollover scopes.
Rollover scope can be used in the following ways:
+
* Directly from application code by calling methods of RolloverScope class.
[not tested]
* By passing rollover scope to saveXXX() and loadXXX() methods of Action
class. [not tested]
* By specifying rollover scope for an action form in struts-config.xml file.
[implemented]
A rollover scope can be configured for automatic garbage collection. Two
techniques are possible:
+
* Specifying removal strategy (by timeout or by request count) and a
limiting value (number of requests or time to live) at scope creation time.
Scope will be removed when its lifetime counter exceeds limiting value.
* Specifying a release property in action mapping; when action forwards to a
release target, the rollover scope is destroyed.
== Using rollover scope explicitly from application code ==
-
(Not all statements of this section are backed up by actual code)
To obtain an instance of a rollover scope use {{{RolloverScope.getInstance}}}
static method. If the scope you are accessing does not exist and "create" flag
is true, new scope will be created. When a rollover scope is accessed
explicitly, its content is not copied to request scope.
@@ -40, +39 @@
To remove rollover scope from the session object use
{{{RolloverScope.remove}}} method. If "writeThrough" flag was set at scope
creation time, rollover data is removed from request scope as well.
== Using saveXXX methods of Action class ==
-
TBD
== Using rollover scope to store an action form ==
-
- In a Struts application a rollover scope can be used in action mapping
definition just as request and session scopes. To declare a rollover scope for
an action form specify {{{scope="rollover"}}} in action mapping definition.
Below is example of a typical use case implemented with two action mappings: a
Log In component.
+ In a Struts application a rollover scope can be used in action mapping
definition just as request and session scopes. To declare a rollover scope for
an action form specify {{{scope="rollover"}}} in action mapping definition.
Below is example of a typical use case implemented with two action mappings: a
Log In component.
One mapping is used for submitting login and password from the browser,
another mapping use used for rendering either "Not logged in"...
{{attachment:login.gif}}
- ...or "logged in" page.
+ ...or "logged in" page.
{{attachment:logout.gif}}
- A rollover scope is used to store form bean in between requests.
+ A rollover scope is used to store form bean in between requests.
=== Rollover-scoped action form, example 1 ===
-
This is the simplest way of configuring the rollover scope: just declaring
the scope as "rollover". The input action inherits from !EventDispatchAction
and is used as event processor. Events are defined in 'parameter' attribute
(see !EventDispatchAction for details). Notice that 'scope' has 'rollover'
value. A removal strategy of with lifetime of one request is defined for
rollover scope - perfect for most redirect-after-post use cases. Render action
uses login/logout state to render an appropriate view.
By default, removal strategy is by request count, and maximum lifetime is one
request. This means, that when you navigate from this action, the "loginform"
action form will mature, and on a next request it will be removed from session.
{{{
-
-
-
+ . type = "org.apache.struts.samples.login.LoginInputAction" name =
"loginform" scope = "rollover" validate = "false" parameter =
"initEvent=init,loginEvent=login,cancelEvent=cancel,logoutEvent=logout">
+
+
-
-
+ . type = "org.apac