Hi Martin

2010/5/25 Martin Marinschek <mmarinschek@apache.org>
Hi Leonardo,

ok

> If we have some code on UIData.markInitialState() we have to call
> clearInitialState
> on all children, save the component initial state and call again
> markInitialState. The
> idea behind do not call UIComponent.markInitialState() on
> ComponentTagHandlerDelegate,
> is in avoid do that in reverse order and just do it in one step.

well, you need to have all children constructed, when
markInitialState() is called on the table, right? Is that what it
boils down to?


When markInitialState() is called on the table, we need to save the state of all children
inside the table component. Later, when UIData.setRowIndex is called we use that
information to restore the initial state first of each component and then apply the delta.

Right now, when markInitialState() is called on the table, all children inside the table has
been already marked, so we need to call clearInitialState() on all children, then call saveState()
to get the required information and then call again markInitialState().

I tried to find an alternative to not traverse the tree calling markInitialState() as suggested,
and use something different like a listener to PostAddToViewEvent, but I found that it will not
work, because it is possible to create a tag that add some attached object to a component
on this event (for example: t:autoScrollPage).

regards,

Leonardo Uribe


> on the state. The code proposed additionally save and restore the delta, and
> the
> delta per row is saved on UIData state.

ok

>
>> By the way - I donīt like Alexanderīs idea of having a
>> restoreRowState/saveRowState (this additional API would only be useful
>> inside repeater-components). Instead, I would propagate a
>> getTransientAttributesMap() API, and the repeating-component would
>> just take care of saving/restoring this as well. I believe this API
>> could be used for a lot of other stuff. It would essentially a
>> component-request scope, which we donīt have yet, and for which we had
>> quite a few usages in cs-JSF already.
>>
>> We could also embed this state in the stateMap with a transient=true
>> attribute, thatīs the other option - then it wonīt be a public API
>> however.
>>
>>
> The important here is provide methods to save and restore that map/variable
> set.
> As long as we have some way to do that, we could call it from
> UIData.setRowIndex. I like the idea to extend StateHelper with accesors
> and save/restore methods for transient components.

I agree.

Can we add this to our JSF 2.1 roadmap?

best regards,

Martin