[ http://issues.apache.org/jira/browse/ADFFACES-210?page=comments#action_12438778 ] Arjuna Wijeyekoon commented on ADFFACES-210: --------------------------------------------
working on a 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 > > 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
