Hello Renzo,

There's an InternalState that we use to keep the mapping toward the rowKey
during those phases to handle that issue.


Regards,

~ Simon

On 9/5/07, Renzo Tomaselli <[EMAIL PROTECTED]> wrote:
>
>  Simon, not sure I got it. If you use rowIndex to identify a row during
> update model, how do you provide consistency ? I thought that rowKey was
> introduced exactly to avoid any potential mismatch when rows have to be
> reloaded from the business layer. Thus if we need to update a field of the
> third row, my guess was that this CollectionModel allows for asking the bean
> for that row by key - not by position  2 - which now might lead to another
> row as compared to the previous rendering.
>
> -- Renzo
>
> Simon Lessard wrote:
>
> Hello Renzo,
>
> We're using it during rendering, but we're also using it during all other
> phases as well and it's quite understandable. Let take a table for example.
> Let say the table contains only one column with an input inputText component
> nodestamp. The renderer obviously has to loop through all elements to render
> all rows. All client ids will be name spaced using tableId:rowIndex:inputId.
> Whatever the phase we're in, we have to run it on every row, thus looping
> through all elements is again required. Since rowKey does not provide
> looping API, we have to do that usins row indexes.
>
>
> Regards,
>
> ~ Simon
>
> On 9/5/07, *Renzo Tomaselli* < [EMAIL PROTECTED]> wrote:
>
> Thanks Simon. As a further guess - I think we have to distinguish between
> phase usage of such methods.
> I presume (hopefully) that position-based indexing is used only during
> rendering, and *not* during restore view/update model.
> In other words, we told the component to render a range [first, first +
> rowsPerPage -1], and only there I expect that row retrieval occurs by
> position, calling setRowIndex/getRowData/getRowKey along that range. At that
> point the game is consistent, since we are still retrieving data from the
> business layer.
> But I expect that during restore view/update model, only
> setRowKey/getRowData is used (if any updating is required), since the
> business layer might have changed positions in the mean time.
> Do you confirm that ?
>
> -- Renzo
>
> Simon Lessard wrote:
>
> Hello Renzo,
>
> Comments inline.
>
> On 9/5/07, *Renzo Tomaselli* <[EMAIL PROTECTED]> wrote:
>
> Hi, I'm using tr:table since a long time, where paging through large
> data sets is implemented by my own CollectionModel.
> But I still miss some logics behind CollectionModel methods I have to
> implement.
> AFAIK, the overall strategy is to use getRowKey/setRowKey to enable
> content-based keys binding server model to client rendering, instead of
> plain position-based indexing. This is important in concurrent cases
> where the dataset might change across requests, and position would lead
> to wrong rows.
>
>
> Yep, but that feature become much much more relevant with TreeModel.
>
> Then current row can be retrieved by getRowData (far from atomic, though).
> But then why do we need to implement setRowIndex/getRowIndex too, which
> defeats the previous purpose, falling back to position-based keys ?
>
>
> setRowIndex is, most of the time, faster. However, it cannot navigate
> through the depth of a TreeModel. Therefore, most of the time, you use the
> rowKey to select a specific element, or the first element of the depth
> you're interested in and then, if you need to loop, you use setRowIndex from
> 0 to rowCount for faster access. Also, it's required to support those method
> to be compatible with the other JSF components using JSF DataModel that
> CollectionModel extends.
>
>
> Hope it makes some sense,
>
> ~ Simon
>
> I guess that these two methods should be alternative, where
> position-based indexing should be used only for non-mutable datasets.
> However I noticed that all above methods are actually called by
> component code.
> Any comment will be appreciated.
>
> -- Renzo
>
>
>
>
>

Reply via email to