myfaces-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Leonardo Uribe (JIRA)" <>
Subject [jira] [Commented] (MYFACES-4036) UIData state is not restorable when rowStatePreserved is set to true
Date Thu, 03 Mar 2016 05:46:18 GMT


Leonardo Uribe commented on MYFACES-4036:

The whole point of Partial State Saving is to save the delta instead the full state. I suppose
this is a problem of the portlet bridge, which is not doing the saveState/restoreState correctly.
I think if you disable PSS it will work.

In other words, what I mean is call processSaveState() and then use the result to restore
the view will not work. When vdl.buildView is called to build the initial state, UIData.markInitialState()
is called and _initialDescendantFullComponentState is filled. This is done by facelets but
if the algorithm build the component tree using something else it will miss that step.

In other words, if _initialDescendantFullComponentState is not filled, there is something
wrong in the way the view is restored but that's probably something that needs to be fixed
by the portlet bridge. 

PSS algorithm relies on markInitialState() calls to isolate the initial state from the delta
state. But if the algorithm does not call markInitialState() at the right time, the algorithm
won't work. 

_initialDescendantFullComponentState is not part of the state, it is considered something
more related to the structure. It should not be saved with the state, because it is supposed
to be calculated when markInitialState() is called, and that code should be called every time
the initial state is built or calculated. 

> UIData state is not restorable when rowStatePreserved is set to true
> --------------------------------------------------------------------
>                 Key: MYFACES-4036
>                 URL:
>             Project: MyFaces Core
>          Issue Type: Bug
>    Affects Versions: 2.2.10-SNAPSHOT
>         Environment: WebSphere Liberty, MyFaces 2.2.8, IBM JSF Portlet Bridge
>            Reporter: Hank Ibell
>            Priority: Minor
> A JSF portlet with input fields inside a h:dataTable component will lose their local
values if validation fails, even when rowStatePreserved is set to true.
> The IBM JSF portlet bridge calls processSaveState() on UIViewRoot so that the bridge
can restore the view state on their RENDER request. After looking at UIData, it looks like
_initialDescendantFullComponentState is lost between Portal's ACTION and RENDER requests (a
new UIData object is created on the RENDER request). Unfortunately, UIData's _rowDeltaStates
will not be restored without its initial state.
> It looks like UIData should also save/restore _initialDescendantFullComponentState in
its saveSate()/restoreState() methods since it may be needed to restore _rowDeltaStates.

This message was sent by Atlassian JIRA

View raw message