Hi,
There's been loads of discussion about how to implement this action
chaining..
Last night I cooked up yet another possible way to do it..
The chainToPage class implementation by Keith Bacon posted earlier
seemed like a nice way to do it at first.. But what I'm looking for is
a more generic way to do this without the action classes actually even
realizing what's happening..
I have a semi-working implementation of the following:
- On the page to which we want to chain to another page we add the
following tag on the jsp-page (or something similar).
<app:returnStamp to="/thisAction" from="/theOtherAction" />
- the returnStamp tag saves request parameters and attributes into
an object (let's call it a stampObject) that is stored to the
session along with the to and from information
- all action - classes are extended from some baseaction (as suggested
by Ted Husted) and this baseaction checks the session to see if there
is a stampObject in the session with a from field for this action.
- if there is one, a new ActionForward object is constructed from
the to - field and this page forwards to it after the processing is
done
- when we return to /thisAction we extract the attributes from
the stampObject and store them as request attributes and remove
the stampObject from the session.
Now to achieve the transparency we should define a few helper methods
to our baseaction - class.
- getParabute( HttpServletRequest request, String name )
* perform calls this to acquire both request parameters and
attributes because if we were forwarded from another action the
needed parameters for this action are not stored in the request
parameters but in the attributes. This method first tries to
find the requested 'name' parameter from attributes and then from
parameters
Possible quirks:
- If we never get back to the /thisAction - page we never remove the
stampObject from the session. I'm not sure how much stuff we should
store in the session.. This is actually one question that someone
could answer: How much stuff should you save in the session and are
there any reasons why _not_ to store long term data in the session ?
- If we have the following page structure:
page A -> page B -> page C -> (back to) page A
Now from page C we return to page A by using the method described
above. But what if we have a page D that the user can get to from
page B and the user goes there and later from page D the user
goes back to page B and from there should be forwarded back to page D.
But in the session we have another forward for this page
(the original one. Going back to page A) and we return there and
_not_ to page D.
* The only solution to this problem I have come up so far is to
add the <app:returnStamp> - tag to _all_ pages that
we can get to from page C
Hopefully my explanation was clear enough..
Now your task, should you choose to accept it, is to shoot down this idea :)
/tuomo
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>