[ http://issues.apache.org/jira/browse/ADFFACES-210?page=all ]
Adam Winer updated ADFFACES-210:
--------------------------------
Status: Resolved (was: Patch Available)
Resolution: Fixed
Committed patch.
> 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