I was hoping someone could provide some guidance about using
StateManager.getViewState().
Without getting into a lot of historical details, we have a legacy
FormRenderer that needs to include the ViewState in a hidden field.
I've tried to use the following call to get current ViewState value:
String viewState =
facesContext.getApplication().getStateManager().getViewState(facesContext);
What seems to happen with MyFaces (I'm currently working off the latest
2.1 trunk), is that, during the render phase, when the first form on the
page is being rendered, this call triggers a full save of the current
state of the component tree and returns the appropriate ViewState
value. In other words, the first time I call this, it works how I would
anticipate.
However, if I have multiple forms on the page, each form makes the same
call but the full state saving logic is no longer triggered. From what
I can tell, the first call does the full state save and then caches it
and simply returns the ViewState value for subsequent calls.
The problem this poses is that the state of our components are not
finalized during that first call. There are more forms and component to
render and the state of some of these has not been completely set yet.
Since future calls only return the cached ViewState value and do not do
a full state save, some of our components fail to behave properly when
an subsequent Ajax request is made because their state is not full saved.
My questions are:
1) Have I characterized the behaviour correctly?
2) Is there a way to force a full state save to occur after the intial
call to getViewState()?
Thanks,
Deryk