No problem. As I was typing it, though, I started to worry that I'd gotten ahead of myself. Is there an easier way to do this? Especially a way that is immune to proxy server stripping of the referer header? Jason seemed to indicate something about a breadcrumb interceptor, but I'm not sure how that would work (especially if you try to use it to remember all of the params that were set).
Note too that this isn't the solution whenever you want to use the referer header. This is for when you want to "bookmark" a place to come back to, with all of the params remembered, so that you can do other things like a confirm page in the meantime. A lot of the time, a simple redirect to the referer will suffice, without any of the source aware stuff. For example, for an add or a delete action, I usually have to go to some page first before the actual add or delete (for add, I have to go to a form; for delete, I go to a confirmation page). In both cases, I want to return to the page from which the link was clicked. Other times, if I just want to come back to the same page immediately without going anywhere else, and I don't want to hard code the link, I use a referer action like in webwork 1.3. Let me know if you need more info for the wiki stuff. Though I'd hate to have this in there and then find out there's an easier way.... -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Mike Porter Sent: Friday, February 13, 2004 3:34 PM To: [EMAIL PROTECTED] Subject: Re: [OS-webwork] WW2 Return To Page - THANKS DREW Drew! This was a great response! Im going to crank it into my code right now. I am also, with your OK going to create a WIKI with this detailed out... most likely in the CookBook section. Mike ----- Original Message ----- From: "Drew McAuliffe" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Wednesday, February 11, 2004 9:47 PM Subject: RE: [OS-webwork] WW2 Return To Page > I do stuff like this a lot. Unfortunately it relies on the referer > header, which I didn't know was vulnerable to proxy modification. Does > anyone have any docs on that? > > Anyway, here's how I do it: > 1) Actions that support this implement a SourceAware interface, which > has a > getter/setter for a String "source" property. > 2) Links that want to start a process that will come back to the same > page use a "markSource" parameter set to true. For example, a link on > a view page > to an "add" action would include "markSource=true" in the link URL. > After add completes successfully, it returns back to this same page. > 3) The action to which you are linking has a "SourceTrackingInterceptor" in > the stack. It detects if "markSource" = "true" in the "before" method (it's > a subclass of AroundInterceptor). If so, it accesses the source URL > using the referer header and stores it via setSource(), which is > exposed via the SourceAware interface. > 4) The page to which you link has a "source" hidden control on the > form, so > that you can store the source URL. The action for this form calls your > SourceAware action. > 5) The SourceAware action has a result that can deal with sources. In > my case, I use a SourceAwareRedirectResult, which is just like a > redirect result EXCEPT that it first tries to see if "source" has been > set in the action. If it has, it redirects to that, which takes you > back to the page with the "markSource" link. If source hasn't been > set, it redirects as normal, to the configured "location" param, just > like a normal RedirectResult. That way, if source wasn't specified, > you can have a default > result. > > An example of this is an add action. Items in an app can be added from > several pages, and you want control over where you go after a > successful add. It's even more important for deletes, since you can > delete from a detail page of a record in my app or from a list of > items, which could be on > any page. There's no way to know at configure time where you should go after > a delete because you could have initiated it from one of many > different places. Technically speaking, I suppose you could have a > configured result for each possible place, but I've found that this > approach makes it easier, > since you don't need to worry about results and you can freely include > a delete link anywhere you want without having to create a result. > > Here's a specific example that might explain how/why I found this necessary. > It was the main impetus to implement this mechanism, which I've since > used > elsewhere: > -you're on a page with a list of items, each of which has a delete link. > -after clicking on the delete link, you don't just want the item to go away; > you need to confirm the deletion. So, your delete link is actually to > a delete confirm page, not to the action that actually does the delete. > -This confirm page is reached via a load action, that is source aware. > It also has a source tracking interceptor, so it knows that if the > markSource property was set when calling it, it takes the referer and > sticks it in the > source property. It has to be a form, with a hidden control called > source to > store the source information filled in by the interceptor. This makes > sure that it's available to the next action. > -After confirming, you chain to the delete action. It is also source aware, > and because you're chaining, the source property is taken from the > form and > stuck into the delete action's source property. The delete action has > a source aware redirect result, so it sees that source was set, and > then uses > that for your redirect. > > Does that make sense? Am I making things too confusing for myself? Am > I vulnerable to overeager proxy servers? Any input is welcome; so far > I like the solution but if there's an easier way without worrying > about proxies I'd > be glad to implement it. I'm also curious if there's an easier way to > do this that I just missed in the rush to implement it. > > Thanks, > Drew > > -----Original Message----- > From: [EMAIL PROTECTED] > [mailto:[EMAIL PROTECTED] On Behalf Of > Anthony Eden > Sent: Wednesday, February 11, 2004 11:50 AM > To: [EMAIL PROTECTED] > Subject: Re: [OS-webwork] WW2 Return To Page > > I don't think I'd trust the Referer header. It is probably better to > pass a > parameter and if the parameter doesn't exist then to provide a default. > > Sincerely, > Anthony Eden > > Frank Febbraro wrote: > > >Can you use the Referer request header? > > > >That tells what page you just came from, be wary though as some > >proxies will strip that. > > > >----- Original Message ----- > >From: "Mike Porter" <[EMAIL PROTECTED]> > >To: <[EMAIL PROTECTED]> > >Sent: Wednesday, February 11, 2004 1:46 PM > >Subject: [OS-webwork] WW2 Return To Page > > > > > > > > > >>Gang, > >>I have a WW page that I can get to from 2 different places. When > >>the > >> > >> > >users > > > > > >>is done with the target page, they should return back to the correct > >> > >> > >calling > > > > > >>page. > >>In my WW XWork.xml file I currently have a dispatch mapping that > >>returns > >> > >> > >me > > > > > >>to only ONE page. Sort of hard coded. > >> > >>I was just about to implement a solution where I send a parameter to > >>the target page called returnToPage=pageA. The target jsp would put > >>this value into a hidden field. Then my Action would read this > >>value and use this value as the RETURN parameter for the execute() method. > >>I would then have dispatch mappings for both pageA and pageB... > >> > >>This approach seems ugly. Are there smarter ways of doing the same thing? > >>IE: determining dynamically what the dispatch should be based on > >>where the user was coming from? > >> > >>Mike > >> > >> > >> > >> > >> > >>------------------------------------------------------- > >>SF.Net is sponsored by: Speed Start Your Linux Apps Now. > >>Build and deploy apps & Web services for Linux with a free DVD > >>software kit from IBM. Click Now! > >>http://ads.osdn.com/?ad_id=1356&alloc_id=3438&op=click > >>_______________________________________________ > >>Opensymphony-webwork mailing list > >>[EMAIL PROTECTED] > >>https://lists.sourceforge.net/lists/listinfo/opensymphony-webwork > >> > >> > >> > > > > > > > > > >------------------------------------------------------- > >SF.Net is sponsored by: Speed Start Your Linux Apps Now. > >Build and deploy apps & Web services for Linux with a free DVD > >software kit from IBM. Click Now! > >http://ads.osdn.com/?ad_id=1356&alloc_id=3438&op=click > >_______________________________________________ > >Opensymphony-webwork mailing list > >[EMAIL PROTECTED] > >https://lists.sourceforge.net/lists/listinfo/opensymphony-webwork > > > > > > > > > > ------------------------------------------------------- > SF.Net is sponsored by: Speed Start Your Linux Apps Now. > Build and deploy apps & Web services for Linux with a free DVD > software kit from IBM. Click Now! > http://ads.osdn.com/?ad_id=1356&alloc_id=3438&op=click > _______________________________________________ > Opensymphony-webwork mailing list > [EMAIL PROTECTED] > https://lists.sourceforge.net/lists/listinfo/opensymphony-webwork ------------------------------------------------------- SF.Net is sponsored by: Speed Start Your Linux Apps Now. Build and deploy apps & Web services for Linux with a free DVD software kit from IBM. Click Now! http://ads.osdn.com/?ad_id=1356&alloc_id=3438&op=click _______________________________________________ Opensymphony-webwork mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/opensymphony-webwork