You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@myfaces.apache.org by "Dora Rajappan (JIRA)" <de...@myfaces.apache.org> on 2013/10/31 18:59:18 UTC

[jira] [Commented] (MYFACES-3804) Use the same key in server side state saving for ajax requests

    [ https://issues.apache.org/jira/browse/MYFACES-3804?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13810496#comment-13810496 ] 

Dora Rajappan commented on MYFACES-3804:
----------------------------------------

# 1. This key generation per request for ajax is also fine. Instead of  changing the logic for ajax just create a key, its the same over head. Depending on the max count of NumberOfSequentialViewsInSession these previous keys/values are removed from the map. Hence the map size is limited to this count. If new key is generated for ajax number of views in the collection goes up to max count. Of course using same key can save a few objects in this map. Current algorithm is good and you can avoid ViewExpiredException by making ajax specific logic.

#2. Ajax redirect  will not add a view in this map. Cause partial rendering of the current page is avoided.

@RequestScoped
public class RedirectBean {

    public String redirect() {

        FacesContext ctx = FacesContext.getCurrentInstance();

        ExternalContext extContext = ctx.getExternalContext();
        String url = extContext.encodeActionURL(ctx.getApplication().getViewHandler().getActionURL(ctx, "/ajax/redirecttarget.xhtml"));
        try {

            extContext.redirect(url);
        } catch (IOException ioe) {
            throw new FacesException(ioe);

        }
        return null;
 
    }

<h:head>
    <title>Ajax Redirect</title>
</h:head>
<h:body>
    <h:form id="form">
        <h:commandButton id="redirect" value="Redirect" action="#{redirectBean.redirect}">
             <f:ajax execute="@this" render="@none"/>
        </h:commandButton>
    </h:form>
</h:body>



> Use the same key in server side state saving for ajax requests
> --------------------------------------------------------------
>
>                 Key: MYFACES-3804
>                 URL: https://issues.apache.org/jira/browse/MYFACES-3804
>             Project: MyFaces Core
>          Issue Type: Improvement
>          Components: JSR-344
>            Reporter: Leonardo Uribe
>
> The current code for server side state saving creates one key per request to store the view state. This is ok, but it is not necessary for ajax requests. 
> The reason why is not necessary is because you can never go back to a page when using ajax. If you are on page A and the current request is an ajax request and it returns to the same page and the view is the same that the one that has been restored, the key or the token sent does not need to change, what changes is the internal state of the view. From the client side the page is the same. We can take advantage of this fact and just update the state stored in SerializedViewCollection for the view. 
> The challenge here is detect when this strategy is applicable. For example, what happen if there is an ajax redirect? It looks is a good idea for implement in 2.2, because it avoids to store unnecessary information into session and optimize the use of each view slot. 



--
This message was sent by Atlassian JIRA
(v6.1#6144)