[ 
http://issues.apache.org/jira/browse/TOMAHAWK-503?page=comments#action_12431082 
] 
            
Kevin Galligan commented on TOMAHAWK-503:
-----------------------------------------

I've been playing around with this for a little bit and have some thoughts.  
The first thought is this is great and I've felt something like this is needed. 
 However, I think the functionality needs to be configurable.  There are 
several general use cases where this would be very helpful, but also situations 
where this becomes a problem.

The first general issue I'm concerned with is related to the following:

"I think it would be VERY nice if we get myfaces to work with <redirect the 
same way as without"

I think this would be true is certain situations, but just making '<redirect/>' 
the same seems like it would actually break the JSF implementation.  In 
concept, myfaces sits on top of and extends the standard jsf implementation.  
This, however, alters the base of functionality.  I would think it would be 
better to allow redirects to carry state information, but it should be 
explicitly turned on rather than just happening.

1) Want to break state completely.  This is the "standard" situation.  You 
redirect, and all page and request level state is lost.  This is useful if the 
user has completed a full "page cycle" and they are being redirected to a home 
page of sorts.  In fact, with are recent application I had some issues with 
using a redirect and expecting the state to be completely refreshed.  Bad 
coding?  Maybe, but still.  I was expecting it to work a different way.

2) Want to post a message, but otherwise drop state.  For example, adding a new 
"Account" record.  When its done, the user would be returned to the "Account 
List" page, but a message like "Account added" should be posted to the top.  
All other request state, however, should be lost.

3) Full requst state retained.  This allows the "correct" url to show up in the 
browser, and allows the user to hit "Refresh" without the double post problem.

I think there should be some way of turning this on and off for particular 
requests.  In fact, I think it should be more like by default it functions as 
it does currently, and must be explicitly turned on to carry state.  I'm not 
sure how that would be configured.  The "natural" place would seem to be in the 
config file, but I don't really like the idea of either changing the config 
file format or adding custom info to the url.

Another method, that would be a little more "hacky", but functional would be to 
add a special key/value to the request map, and test for it in the 'redirect' 
function of the 'RedirectTrackerExternalContextWrapper'.  So, if you have a 
function that performs something, at the end just put something like the 
following:

public String someFunction()
{
    .... (the code)
    RedirectTrackerUtils.trackRedirect(FacesContext.getCurrentInstance());
    return "success";
}

'trackRedirect' would just be something like

public static void trackRedirect(FacesContext context)
{
    context.getExternalContext().getRequestMap().put("redirectTrackerEnabled", 
Boolean.TRUE);
}

This of course clutters the code with UI specifc issues, but I think its 
workable from a purely functional perspective.  Thoughts?

Also, I think it might be a good idea to use an id number that's a little more 
obfuscated.  Having a low numberd sequential id means somebody is going to 
start messing around with it manually.

> Capture and restore saveState Beans and messages when using redirect 
> navigation rule
> ------------------------------------------------------------------------------------
>
>                 Key: TOMAHAWK-503
>                 URL: http://issues.apache.org/jira/browse/TOMAHAWK-503
>             Project: MyFaces Tomahawk
>          Issue Type: Improvement
>    Affects Versions: 1.1.5-SNAPSHOT
>            Reporter: Mario Ivankovits
>         Assigned To: Mario Ivankovits
>         Attachments: impl.diff, RedirectTracker.java, tom.diff
>
>
> Ok, this is a try to get what is described in the summary.
> The heart of this patch is the RedirectTracker.
> How it works:
> *) In NavigationHandlerImpl when it comes to the redirect the RedirectTracker 
> will capture all required (save-state beans/messages) data. The tracker 
> appends a special parameter (_rtid=) to the redirect url so the saved state 
> can be looked up in an map.
> *) In LifeCycleImpl in restoreView the RedirectTracker will check for the 
> special parameter and lookup the map using its value. If an entry was found 
> the data will be restored.
> *) In UISaveState every bean rematerialized in restoreState will put it in a 
> request-scoped map
> Known limitations:
> *) need to make the number of tracked redirects configureable (back-button) 
> currently its hard-coded to 20
> *) some, as I didnt tested it very well
> I added this patch as a base to discuss what could be made better, though the 
> goal is to add this functionality to myFaces.
> I hope some else jump in and we get a vital discussion about this topic.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to