You are viewing a plain text version of this content. The canonical link for it is here.
Posted to adffaces-issues@incubator.apache.org by "Arjuna Wijeyekoon (JIRA)" <ad...@incubator.apache.org> on 2006/10/16 02:02:36 UTC

[jira] Updated: (ADFFACES-210) move rowKey string token map from UIXCollection into corresponding Renderer

     [ http://issues.apache.org/jira/browse/ADFFACES-210?page=all ]

Arjuna Wijeyekoon updated ADFFACES-210:
---------------------------------------

    Attachment: clientrowkeymanager.patch

uploaded a patch with the changes discussed in this issue.

> 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: clientrowkeymanager.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