Hi List,

I implemented my own DataModel for backing a tr:table. By adding logging 
to my DataModel, I discovered that the table seems to call the DataModel 
more often than necessary. Depending on how "smart" the DataModel is, this 
can have a bad influence on the performance. Is there a way to prevent 
those calls muyself? Or should I consider this as a bug? To prove my 
point, I have a snippet of my log file pasted below.

I created these log entries as follows:
- I have a data set with 95542 records.
- I've set the rows parameter of tr:table to 15 (so 15 rows per page)

It looks like the table is implemented with some sort of "triple check 
everything" philosophy. For instance the getRowCount() is called three 
times. I think it should be enough to call it once. But what really 
surprises me, is that a combination of setRowIndex and getRowIndex is 
called for every last row of a page. That is, every last row of a page 
that appears in the drop down box. For pages that are hidden behind the 
"More..." option of the drop down, the methods are not called. And why is 
the rowIndex reset to 2 every time? When the first page is actually being 
filled with rows, the getRowCount is called once again. And for each row 
on a page, a isRowAvailable is called twice, and a getRowIndex even seven 
times! I know that neither of those are expensive calls. Fortunately the 
most expensive call (getRowData) is only called once per row. But I still 
get the impression that it can be implemented somewhat more efficient. Why 
is it neccesary to verify that a row exists before adding it to the drop 
down list? By calling getRowCount() the table should know that all rows 
between 0 and (in this case) 95541 does exist, isn't it?

ScrollableDataModel created
ScrollableDataModel.setRowIndex(-1) called.
ScrollableDataModel.isRowAvailable() called on row 0. Returning true
ScrollableDataModel.getRowIndex() called on row 1
ScrollableDataModel.getRowIndex() called on row 1
ScrollableDataModel.isRowAvailable() called on row 1. Returning true
ScrollableDataModel.getRowIndex() called on row 1
ScrollableDataModel.setRowIndex(-1) called.
ScrollableDataModel.isRowAvailable() called on row 0. Returning true
ScrollableDataModel.getRowData() called on row 1
ScrollableDataModel.isRowAvailable() called on row 1. Returning true
ScrollableDataModel.getRowIndex() called on row 2
ScrollableDataModel.getRowCount() returning 95542
ScrollableDataModel.getRowIndex() called on row 2
ScrollableDataModel.setRowIndex(14) called.
ScrollableDataModel.isRowAvailable() called on row 14. Returning true
ScrollableDataModel.setRowIndex(2) called.
ScrollableDataModel.getRowCount() returning 95542
ScrollableDataModel.getRowIndex() called on row 2
ScrollableDataModel.getRowCount() returning 95542
ScrollableDataModel.getRowIndex() called on row 2
ScrollableDataModel.setRowIndex(0) called.
ScrollableDataModel.isRowAvailable() called on row 0. Returning true
ScrollableDataModel.setRowIndex(2) called.
ScrollableDataModel.getRowIndex() called on row 2
ScrollableDataModel.setRowIndex(14) called.
ScrollableDataModel.isRowAvailable() called on row 14. Returning true
ScrollableDataModel.setRowIndex(2) called.
ScrollableDataModel.getRowIndex() called on row 2
ScrollableDataModel.setRowIndex(29) called.
ScrollableDataModel.isRowAvailable() called on row 29. Returning true
ScrollableDataModel.setRowIndex(2) called.
ScrollableDataModel.getRowIndex() called on row 2
ScrollableDataModel.setRowIndex(44) called.
ScrollableDataModel.isRowAvailable() called on row 44. Returning true
ScrollableDataModel.setRowIndex(2) called.
ScrollableDataModel.getRowIndex() called on row 2
ScrollableDataModel.setRowIndex(59) called.
ScrollableDataModel.isRowAvailable() called on row 59. Returning true
ScrollableDataModel.setRowIndex(2) called.
ScrollableDataModel.getRowIndex() called on row 2
ScrollableDataModel.setRowIndex(74) called.
ScrollableDataModel.isRowAvailable() called on row 74. Returning true
ScrollableDataModel.setRowIndex(2) called.
ScrollableDataModel.getRowIndex() called on row 2
ScrollableDataModel.setRowIndex(89) called.
ScrollableDataModel.isRowAvailable() called on row 89. Returning true
ScrollableDataModel.setRowIndex(2) called.
ScrollableDataModel.getRowIndex() called on row 2
ScrollableDataModel.setRowIndex(104) called.
ScrollableDataModel.isRowAvailable() called on row 104. Returning true
ScrollableDataModel.setRowIndex(2) called.
ScrollableDataModel.getRowIndex() called on row 2
ScrollableDataModel.setRowIndex(119) called.
ScrollableDataModel.isRowAvailable() called on row 119. Returning true
ScrollableDataModel.setRowIndex(2) called.
ScrollableDataModel.getRowIndex() called on row 2
ScrollableDataModel.setRowIndex(134) called.
ScrollableDataModel.isRowAvailable() called on row 134. Returning true
ScrollableDataModel.setRowIndex(2) called.
ScrollableDataModel.getRowIndex() called on row 2
ScrollableDataModel.setRowIndex(149) called.
ScrollableDataModel.isRowAvailable() called on row 149. Returning true
ScrollableDataModel.setRowIndex(2) called.
ScrollableDataModel.getRowIndex() called on row 2
ScrollableDataModel.setRowIndex(164) called.
ScrollableDataModel.isRowAvailable() called on row 164. Returning true
ScrollableDataModel.setRowIndex(2) called.
ScrollableDataModel.getRowIndex() called on row 2
ScrollableDataModel.setRowIndex(179) called.
ScrollableDataModel.isRowAvailable() called on row 179. Returning true
ScrollableDataModel.setRowIndex(2) called.
ScrollableDataModel.getRowIndex() called on row 2
ScrollableDataModel.setRowIndex(194) called.
ScrollableDataModel.isRowAvailable() called on row 194. Returning true
ScrollableDataModel.setRowIndex(2) called.
ScrollableDataModel.getRowIndex() called on row 2
ScrollableDataModel.setRowIndex(209) called.
ScrollableDataModel.isRowAvailable() called on row 209. Returning true
ScrollableDataModel.setRowIndex(2) called.
ScrollableDataModel.getRowIndex() called on row 2
ScrollableDataModel.setRowIndex(224) called.
ScrollableDataModel.isRowAvailable() called on row 224. Returning true
ScrollableDataModel.setRowIndex(2) called.
ScrollableDataModel.getRowIndex() called on row 2
ScrollableDataModel.setRowIndex(239) called.
ScrollableDataModel.isRowAvailable() called on row 239. Returning true
ScrollableDataModel.setRowIndex(2) called.
ScrollableDataModel.getRowIndex() called on row 2
ScrollableDataModel.setRowIndex(254) called.
ScrollableDataModel.isRowAvailable() called on row 254. Returning true
ScrollableDataModel.setRowIndex(2) called.
ScrollableDataModel.getRowIndex() called on row 2
ScrollableDataModel.setRowIndex(269) called.
ScrollableDataModel.isRowAvailable() called on row 269. Returning true
ScrollableDataModel.setRowIndex(2) called.
ScrollableDataModel.getRowIndex() called on row 2
ScrollableDataModel.setRowIndex(284) called.
ScrollableDataModel.isRowAvailable() called on row 284. Returning true
ScrollableDataModel.setRowIndex(2) called.
ScrollableDataModel.getRowIndex() called on row 2
ScrollableDataModel.setRowIndex(299) called.
ScrollableDataModel.isRowAvailable() called on row 299. Returning true
ScrollableDataModel.setRowIndex(2) called.
ScrollableDataModel.getRowIndex() called on row 2
ScrollableDataModel.setRowIndex(314) called.
ScrollableDataModel.isRowAvailable() called on row 314. Returning true
ScrollableDataModel.setRowIndex(2) called.
ScrollableDataModel.getRowIndex() called on row 2
ScrollableDataModel.setRowIndex(329) called.
ScrollableDataModel.isRowAvailable() called on row 329. Returning true
ScrollableDataModel.setRowIndex(2) called.
ScrollableDataModel.getRowIndex() called on row 2
ScrollableDataModel.setRowIndex(344) called.
ScrollableDataModel.isRowAvailable() called on row 344. Returning true
ScrollableDataModel.setRowIndex(2) called.
ScrollableDataModel.getRowIndex() called on row 2
ScrollableDataModel.setRowIndex(359) called.
ScrollableDataModel.isRowAvailable() called on row 359. Returning true
ScrollableDataModel.setRowIndex(2) called.
ScrollableDataModel.getRowIndex() called on row 2
ScrollableDataModel.setRowIndex(374) called.
ScrollableDataModel.isRowAvailable() called on row 374. Returning true
ScrollableDataModel.setRowIndex(2) called.
ScrollableDataModel.getRowIndex() called on row 2
ScrollableDataModel.setRowIndex(389) called.
ScrollableDataModel.isRowAvailable() called on row 389. Returning true
ScrollableDataModel.setRowIndex(2) called.
ScrollableDataModel.getRowIndex() called on row 2
ScrollableDataModel.setRowIndex(404) called.
ScrollableDataModel.isRowAvailable() called on row 404. Returning true
ScrollableDataModel.setRowIndex(2) called.
ScrollableDataModel.getRowIndex() called on row 2
ScrollableDataModel.setRowIndex(419) called.
ScrollableDataModel.isRowAvailable() called on row 419. Returning true
ScrollableDataModel.setRowIndex(2) called.
ScrollableDataModel.getRowIndex() called on row 2
ScrollableDataModel.setRowIndex(434) called.
ScrollableDataModel.isRowAvailable() called on row 434. Returning true
ScrollableDataModel.setRowIndex(2) called.
ScrollableDataModel.setRowIndex(2) called.
ScrollableDataModel.isRowAvailable() called on row 2. Returning true
ScrollableDataModel.getRowData() called on row 3
ScrollableDataModel.isRowAvailable() called on row 3. Returning true
ScrollableDataModel.getRowIndex() called on row 4
ScrollableDataModel.getRowCount() returning 95542
ScrollableDataModel.getRowIndex() called on row 4
ScrollableDataModel.setRowIndex(14) called.
ScrollableDataModel.isRowAvailable() called on row 14. Returning true
ScrollableDataModel.setRowIndex(4) called.
ScrollableDataModel.setRowIndex(0) called.
ScrollableDataModel.isRowAvailable() called on row 0. Returning true
ScrollableDataModel.getRowData() called on row 1
ScrollableDataModel.isRowAvailable() called on row 1. Returning true
ScrollableDataModel.getRowIndex() called on row 2
ScrollableDataModel.getRowIndex() called on row 2
ScrollableDataModel.getRowIndex() called on row 2
ScrollableDataModel.getRowIndex() called on row 2
ScrollableDataModel.getRowIndex() called on row 2
ScrollableDataModel.getRowIndex() called on row 2
ScrollableDataModel.getRowIndex() called on row 2
ScrollableDataModel.setRowIndex(1) called.
ScrollableDataModel.isRowAvailable() called on row 1. Returning true
ScrollableDataModel.getRowData() called on row 2
ScrollableDataModel.isRowAvailable() called on row 2. Returning true
ScrollableDataModel.getRowIndex() called on row 3
ScrollableDataModel.getRowIndex() called on row 3
ScrollableDataModel.getRowIndex() called on row 3
ScrollableDataModel.getRowIndex() called on row 3
ScrollableDataModel.getRowIndex() called on row 3
ScrollableDataModel.getRowIndex() called on row 3
ScrollableDataModel.getRowIndex() called on row 3
ScrollableDataModel.setRowIndex(2) called.
ScrollableDataModel.isRowAvailable() called on row 2. Returning true
ScrollableDataModel.getRowData() called on row 3
ScrollableDataModel.isRowAvailable() called on row 3. Returning true
ScrollableDataModel.getRowIndex() called on row 4
ScrollableDataModel.getRowIndex() called on row 4
ScrollableDataModel.getRowIndex() called on row 4
ScrollableDataModel.getRowIndex() called on row 4
ScrollableDataModel.getRowIndex() called on row 4
ScrollableDataModel.getRowIndex() called on row 4
ScrollableDataModel.getRowIndex() called on row 4
ScrollableDataModel.setRowIndex(3) called.
ScrollableDataModel.isRowAvailable() called on row 3. Returning true
ScrollableDataModel.getRowData() called on row 4
ScrollableDataModel.isRowAvailable() called on row 4. Returning true
ScrollableDataModel.getRowIndex() called on row 5
ScrollableDataModel.getRowIndex() called on row 5
ScrollableDataModel.getRowIndex() called on row 5
ScrollableDataModel.getRowIndex() called on row 5
ScrollableDataModel.getRowIndex() called on row 5
ScrollableDataModel.getRowIndex() called on row 5
ScrollableDataModel.getRowIndex() called on row 5
ScrollableDataModel.setRowIndex(4) called.
ScrollableDataModel.isRowAvailable() called on row 4. Returning true
ScrollableDataModel.getRowData() called on row 5
ScrollableDataModel.isRowAvailable() called on row 5. Returning true
ScrollableDataModel.getRowIndex() called on row 6
ScrollableDataModel.getRowIndex() called on row 6
ScrollableDataModel.getRowIndex() called on row 6
ScrollableDataModel.getRowIndex() called on row 6
ScrollableDataModel.getRowIndex() called on row 6
ScrollableDataModel.getRowIndex() called on row 6
ScrollableDataModel.getRowIndex() called on row 6
ScrollableDataModel.setRowIndex(5) called.
ScrollableDataModel.isRowAvailable() called on row 5. Returning true
ScrollableDataModel.getRowData() called on row 6
ScrollableDataModel.isRowAvailable() called on row 6. Returning true
ScrollableDataModel.getRowIndex() called on row 7
ScrollableDataModel.getRowIndex() called on row 7
ScrollableDataModel.getRowIndex() called on row 7
ScrollableDataModel.getRowIndex() called on row 7
ScrollableDataModel.getRowIndex() called on row 7
ScrollableDataModel.getRowIndex() called on row 7
ScrollableDataModel.getRowIndex() called on row 7
ScrollableDataModel.setRowIndex(6) called.
ScrollableDataModel.isRowAvailable() called on row 6. Returning true
ScrollableDataModel.getRowData() called on row 7
ScrollableDataModel.isRowAvailable() called on row 7. Returning true
ScrollableDataModel.getRowIndex() called on row 8
ScrollableDataModel.getRowIndex() called on row 8
ScrollableDataModel.getRowIndex() called on row 8
ScrollableDataModel.getRowIndex() called on row 8
ScrollableDataModel.getRowIndex() called on row 8
ScrollableDataModel.getRowIndex() called on row 8
ScrollableDataModel.getRowIndex() called on row 8
ScrollableDataModel.setRowIndex(7) called.
ScrollableDataModel.isRowAvailable() called on row 7. Returning true
ScrollableDataModel.getRowData() called on row 8
ScrollableDataModel.isRowAvailable() called on row 8. Returning true
ScrollableDataModel.getRowIndex() called on row 9
ScrollableDataModel.getRowIndex() called on row 9
ScrollableDataModel.getRowIndex() called on row 9
ScrollableDataModel.getRowIndex() called on row 9
ScrollableDataModel.getRowIndex() called on row 9
ScrollableDataModel.getRowIndex() called on row 9
ScrollableDataModel.getRowIndex() called on row 9
ScrollableDataModel.setRowIndex(8) called.
ScrollableDataModel.isRowAvailable() called on row 8. Returning true
ScrollableDataModel.getRowData() called on row 9
ScrollableDataModel.isRowAvailable() called on row 9. Returning true
ScrollableDataModel.getRowIndex() called on row 10
ScrollableDataModel.getRowIndex() called on row 10
ScrollableDataModel.getRowIndex() called on row 10
ScrollableDataModel.getRowIndex() called on row 10
ScrollableDataModel.getRowIndex() called on row 10
ScrollableDataModel.getRowIndex() called on row 10
ScrollableDataModel.getRowIndex() called on row 10
ScrollableDataModel.setRowIndex(9) called.
ScrollableDataModel.isRowAvailable() called on row 9. Returning true
ScrollableDataModel.getRowData() called on row 10
ScrollableDataModel.isRowAvailable() called on row 10. Returning true
ScrollableDataModel.getRowIndex() called on row 11
ScrollableDataModel.getRowIndex() called on row 11
ScrollableDataModel.getRowIndex() called on row 11
ScrollableDataModel.getRowIndex() called on row 11
ScrollableDataModel.getRowIndex() called on row 11
ScrollableDataModel.getRowIndex() called on row 11
ScrollableDataModel.getRowIndex() called on row 11
ScrollableDataModel.setRowIndex(10) called.
ScrollableDataModel.isRowAvailable() called on row 10. Returning true
ScrollableDataModel.getRowData() called on row 11
ScrollableDataModel.isRowAvailable() called on row 11. Returning true
ScrollableDataModel.getRowIndex() called on row 12
ScrollableDataModel.getRowIndex() called on row 12
ScrollableDataModel.getRowIndex() called on row 12
ScrollableDataModel.getRowIndex() called on row 12
ScrollableDataModel.getRowIndex() called on row 12
ScrollableDataModel.getRowIndex() called on row 12
ScrollableDataModel.getRowIndex() called on row 12
ScrollableDataModel.setRowIndex(11) called.
ScrollableDataModel.isRowAvailable() called on row 11. Returning true
ScrollableDataModel.getRowData() called on row 12
ScrollableDataModel.isRowAvailable() called on row 12. Returning true
ScrollableDataModel.getRowIndex() called on row 13
ScrollableDataModel.getRowIndex() called on row 13
ScrollableDataModel.getRowIndex() called on row 13
ScrollableDataModel.getRowIndex() called on row 13
ScrollableDataModel.getRowIndex() called on row 13
ScrollableDataModel.getRowIndex() called on row 13
ScrollableDataModel.getRowIndex() called on row 13
ScrollableDataModel.setRowIndex(12) called.
ScrollableDataModel.isRowAvailable() called on row 12. Returning true
ScrollableDataModel.getRowData() called on row 13
ScrollableDataModel.isRowAvailable() called on row 13. Returning true
ScrollableDataModel.getRowIndex() called on row 14
ScrollableDataModel.getRowIndex() called on row 14
ScrollableDataModel.getRowIndex() called on row 14
ScrollableDataModel.getRowIndex() called on row 14
ScrollableDataModel.getRowIndex() called on row 14
ScrollableDataModel.getRowIndex() called on row 14
ScrollableDataModel.getRowIndex() called on row 14
ScrollableDataModel.setRowIndex(13) called.
ScrollableDataModel.isRowAvailable() called on row 13. Returning true
ScrollableDataModel.getRowData() called on row 14
ScrollableDataModel.isRowAvailable() called on row 14. Returning true
ScrollableDataModel.getRowIndex() called on row 15
ScrollableDataModel.getRowIndex() called on row 15
ScrollableDataModel.getRowIndex() called on row 15
ScrollableDataModel.getRowIndex() called on row 15
ScrollableDataModel.getRowIndex() called on row 15
ScrollableDataModel.getRowIndex() called on row 15
ScrollableDataModel.getRowIndex() called on row 15
ScrollableDataModel.setRowIndex(14) called.
ScrollableDataModel.isRowAvailable() called on row 14. Returning true
ScrollableDataModel.getRowData() called on row 15
ScrollableDataModel.isRowAvailable() called on row 15. Returning true
ScrollableDataModel.getRowIndex() called on row 16
ScrollableDataModel.getRowIndex() called on row 16
ScrollableDataModel.getRowIndex() called on row 16
ScrollableDataModel.getRowIndex() called on row 16
ScrollableDataModel.getRowIndex() called on row 16
ScrollableDataModel.getRowIndex() called on row 16
ScrollableDataModel.getRowIndex() called on row 16
ScrollableDataModel.setRowIndex(4) called.
ScrollableDataModel.isRowAvailable() called on row 4. Returning true
ScrollableDataModel.getRowData() called on row 5
ScrollableDataModel.isRowAvailable() called on row 5. Returning true
ScrollableDataModel.getRowIndex() called on row 6
ScrollableDataModel.setRowIndex(1) called.
ScrollableDataModel.isRowAvailable() called on row 1. Returning true
ScrollableDataModel.getRowData() called on row 2
ScrollableDataModel.isRowAvailable() called on row 2. Returning true
ScrollableDataModel.getRowIndex() called on row 3
ScrollableDataModel.setRowIndex(6) called.
ScrollableDataModel.isRowAvailable() called on row 6. Returning true
ScrollableDataModel.getRowData() called on row 7
ScrollableDataModel.isRowAvailable() called on row 7. Returning true
ScrollableDataModel.getRowIndex() called on row 8

Best regards,
Bart Kummel

Reply via email to