[ 
http://issues.apache.org/jira/browse/ADFFACES-210?page=comments#action_12442672 
] 
            
Arjuna Wijeyekoon commented on ADFFACES-210:
--------------------------------------------

I removed the old patch.
only the most recent patch remains.

> move rowKey string token map from UIXCollection into corresponding Renderer
> ---------------------------------------------------------------------------
>
>                 Key: ADFFACES-210
>                 URL: http://issues.apache.org/jira/browse/ADFFACES-210
>             Project: MyFaces ADF-Faces
>          Issue Type: Improvement
>            Reporter: Arjuna Wijeyekoon
>         Attachments: clientrowkeyManager2.patch
>
>
> Folks,
> Currently the UIXCollection class (which is the super class for 
> table/tree/treeTable) maintains a mapping between
> Object rowkeys and String tokens.
> >>>>>>>>
>         see
>             private ValueMap<Object> _currencyCache = null;
> <<<<<<<<
> I would like to suggest that we move this mapping from the component and into 
> the corresponding renderer.
> We would still have the methods
> UIXCollection.getCurrencyString()
> UIXCollection.setCurrencyString(..)
> However, these would call into the renderer and the renderer would maintain 
> the mapping, and would control pruning of the mapping.
> Why should we do this?
> The reason is that only the renderer knows exactly which tokens are still 
> being used on the client-side. The component does not know this.
> And so the component does not know when to clear or prune this mapping.
> At the moment the component is clearing the mapping at the start of each 
> encode cycle.
> But this breaks some 3rd party renderers which are still displaying certain 
> rows on the client-side.
> A good example is the treeTable component. Let's say the tree is rendering a 
> certain set of rows. The tokens for these rows are being held in the mapping.
> Now the user expands a node, introducing a new subset of rows. Tokens for 
> these rows are now needed (in addition to the existing tokens).
> The encode phase starts and the mapping is cleared.
> The current trinidad treeTable renderer rerenders the entire tree, so all 
> tokens (including the ones for the newly inserted rows are recreated) and 
> things work fine.
> Now let's suppose a 3rd party treeTable renderer has an optimization that 
> only rerenders the part that was inserted.
> Since the component cleared the mapping, only the tokens for the newly 
> inserted rows will exist. The tokens for the old set of rows (which still 
> exist) on the client-side
> are missing. Things will break during decode when the treeTable is 
> subsequently submitted.
> Suggested Changes
> Introduce a new Renderer API called , for eg: RowKeyTokenManager, or 
> RowKeyStringManager, or CurrencyStringManager.
> The tableRenderer would implement this.
> The UIXCollection class would cast its renderer into an instance of this new 
> API and use it to handle the
> get/setCurrencyString  methods.
> It would be up to the renderer to prune and manage the lifecycle of these 
> token strings.
> The renderer would probably store the mapping as a private attribute on the 
> component so that it is properly serialized along with the component.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to