myfaces-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Werner Punz (JIRA)" <...@myfaces.apache.org>
Subject [jira] Issue Comment Edited: (MYFACES-2881) Server state saving with two forms, ajax and normal request is broken
Date Sat, 14 Aug 2010 20:33:17 GMT

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

Werner Punz edited comment on MYFACES-2881 at 8/14/10 4:32 PM:
---------------------------------------------------------------

Hi I did an additional testrun against Mojarra 2.0.3 again. The status in 2.0.2 was that it
only could assign properly the viewstate if the second form was part of the render part.

First it worked on the testcase I have given above, but then:

I tried again, added a bunch of inputs in both forms and then changed the inputs on one side
while doing 500 refreshes.
Then I submitted the second form, and mojarra gave me the lost viewroot exceptiom which we
have all come to love so much. So this means following.

a) Mojarra does some additional state saving optimisations by skipping entirely non changed
view states from the history.
Hence if you dont have any inputs which change their values mojarra always will restore the
same viewstate here.
We probably dont do this for security reasons because we also have alternating public keys
in our viewstate.

b) Mojarras behavior regarding the viewstate handling has not changed, to resolve it properly
you have to push the second form into the render part otherwise it wont work. Sorry to say
that, but the myfaces solution in this regard is better.

So to make the code working on both side of things, you simply have to push the second form
into the render part, myfaces simply is more tolerant than Mojarra by allowing also outer
elements of forms and inner elements of forms in their render part.

I could copy the behavior from Mojarra in this area but I guess this is not a good idea :-)


      was (Author: werpu):
    Hi I did an additional testrun against Mojarra again. The status in 2.0.2 was that it
only could assign properly the viewstate if the second form was part of the render part.

First it worked on the testcase I have given above, but then:

I tried again, added a bunch of inputs in both forms and then changed the inputs on one side
while doing 500 refreshes.
Then I submitted the second form, and mojarra gave me the lost viewroot exceptiom which we
have all come to love so much. So this means following.

a) Mojarra does some additional state saving optimisations by skipping entirely non changed
view states from the history.
Hence if you dont have any inputs which change their values mojarra always will restore the
same viewstate here.
We probably dont do this for security reasons because we also have alternating public keys
in our viewstate.

b) Mojarras behavior regarding the viewstate handling has not changed, to resolve it properly
you have to push the second form into the render part otherwise it wont work. Sorry to say
that, but the myfaces solution in this regard is better.

So to make the code working on both side of things, you simply have to push the second form
into the render part, myfaces simply is more tolerant than Mojarra by allowing also outer
elements of forms and inner elements of forms in their render part.

I could copy the behavior from Mojarra in this area but I guess this is not a good idea :-)

  
> Server state saving with two forms, ajax and normal request is broken
> ---------------------------------------------------------------------
>
>                 Key: MYFACES-2881
>                 URL: https://issues.apache.org/jira/browse/MYFACES-2881
>             Project: MyFaces Core
>          Issue Type: Bug
>          Components: General
>    Affects Versions: 2.0.1, 2.0.2-SNAPSHOT
>         Environment: myfaces 2.0.1 or trunk; 
>            Reporter: Martin Kočí
>            Priority: Blocker
>             Fix For: 2.1.0
>
>
> Use simple xhtml with: 
> <h:form id="form1">
>             <h:commandButton value="Partial">
>                <f:ajax execute="@this" render="@this" />
>             </h:commandButton>
> </h:fom>
> </h:form>
>   <h:form id="form2">
>   <h:commandButton value="Full" />
> </h:form>
> then:
> 1) click "Partial" button 20x or more
> 2) click "Full" button
> -> ViewExpiredException appears. If you click "Partial" 19 times or less ViewExpiredException
does not appear. 
> 20 is default for NUMBER_OF_VIEW_IN_SESSION - it you set this param to 1 you reproduce
this problem with two clicks. Maybe there is more simple test case for reproducing this issue
but I didn't find it yet. 
> This bug is present in 2.0.1 already and is related to server state saving:
> myfaces 2.0.1:
> PSS + server: failed
> PSS + client: ok
> FSS + server:  failed
> FSS + client: ok
> myfaces 2.0.2-SNAPSHOT:
> PSS + server: failed
> PSS + client: ok
> FSS + server:  failed
> FSS + client: ok
> Very likely this causes MYFACES-2877 too. 

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message