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

Adam Balazs commented on MYFACES-3886:
--------------------------------------

I think that is the expected behavior from PF to assign new windowID to every 
opened dialog.
As a fix, I suggest to modify the SerializedViewCollection.java class at the 
line 87 as the followings:

Replace this:
if (_serializedViews.containsKey(key))
        {
            // Update the state, the viewScopeId does not change.
            _serializedViews.put(key, state);
            return;
        }

By this:

if (_serializedViews.containsKey(key))
        {
            // Update the state, the viewScopeId does not change.
            _serializedViews.put(key, state);
            _keys.remove(key);
            _keys.add(key);
            return;
        }

This way the view will be at the end of the list, and the _keys will hold the 
views in 'touching' order. So the _keys[0] will be the oldest view which has 
not been modified.

Patch attached.

> SerializedViewCollection does not update it's _keys list when 
> _serializedViews contains key
> -------------------------------------------------------------------------------------------
>
>                 Key: MYFACES-3886
>                 URL: https://issues.apache.org/jira/browse/MYFACES-3886
>             Project: MyFaces Core
>          Issue Type: Bug
>          Components: General
>    Affects Versions: 2.2.2
>         Environment: PrimeFaces 4.0.12.
>            Reporter: Adam Balazs
>         Attachments: SerializedViewCollection.java.patch
>
>
> When I use DialogFramework (of PrimeFaces), it's adds a new view to the 
> session every time. The problem is that when I post an AJAX request to the 
> original view, the _keys list is not updated, only the view get updated in 
> the _serializedViews map.
> After I reach the limit defined with the 
> org.apache.myfaces.NUMBER_OF_VIEWS_IN_SESSION context-param, MyFaces gets the 
> first element in the _keys list (which is the container view) - assuming that 
> this is the oldest view in the session - and remove the corresponding view 
> from the _serializedViews map by the key. But clearly it is not, as I already 
> posted some AJAX requests to it.
> I think the optimal behavior would be the following: when a view gets an ajax 
> request the code should remove the the key from the _keys list and than add 
> it as a last element.
> The related class is 
> org.apache.myfaces.application.viewstate.SerializedViewCollection at the if 
> condition started at line 87.
> My question is if it is an intended behavior or if it's a bug.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to