Thomas Buckley
Thomas Buckley

Reputation: 6056

Dynamic pagination of rich:dataTable/rich:datascroller with large datasets

I currently have a Richfaces dataTable bound to a backing bean that contains all the data. This table is bound to a Richfaces data scroller.

Users can then enter scroll between the data.

There is also a text box that dynamically updates the data table results displayed to them, based on text they enter into it. It reRenders the dataTable and datascroller on the keyUp event.

The backing bean it’s bound to first pulls all the data from a number of database tables. This data is pulled when the user submits a normal post request to the server, and it’s the results of this request that are used for all subsequent Ajax related queries (Results saved as list of objects, no more database calls made).

I have a problem in that the dataset can be huge at times, 100,000s of records. This causes the initial request to the server to take a very long time.

A possible solution I'm looking at is pulling back only a small amount of the data in one thread for the initial user port request. This data can then be displayed in the data table while the main thread works in the background pulling the bulk of data back.

Is this feasible? Would it be possible to update my datatable/datascoller as the main thread pulls back new data? Would it be difficult?

Database and query optimization has been looked at, so no more improvements of any significance can be made there.

Thanks in advance (I know this probably is not an easy question to answer)

Upvotes: 5

Views: 7762

Answers (2)

nesvarbu
nesvarbu

Reputation: 1016

Implement SerializableDataModel to hold your data for sorting and paginating.

Upvotes: 2

Shervin Asgari
Shervin Asgari

Reputation: 24499

Seems like you need exactly what Seam Application Framework's Query object is providing.

If you don't want to use Seam, you can either view the source, and copy how they are doing it and just steal the idea.

Basically what you need to do is fetch a given result set for each time the user press next, previous, first, last etc

Upvotes: 2

Related Questions