Perhaps the most obvious problem of DataTable and javax.faces.model.DataModel is lack of support for more complicated scenarios that uses data from the database. To solve that problem Richfaces has two major tools:

- set of data-driven components that render data sets in many different ways (rich:dataTable , rich:dataGrid, rich:dataList, a4j:repeat etc.). All this components derived it common functionality from the common core that, in addition to standard javax.faces.model.DataModel, can understand and use
- extended data model classes org.ajax4jsf.model.ExtendedDataModel and org.ajax4jsf.model.SerializableDataModel. This two classes works together to provide functions that missing in standard DataModel.

The most important additional functions are:

- access for rows by primary keys instead of index position
- implementation of "visitor" pattern over the "range" of rows to support "table scroller" or "paginator" functions
- ability to serialize table data so it may be used on a post-back processing without additional database query

To use this extensions you need to implement your own DataModel that extends one of our ExtendedDataModel classes and implement few of important functions. Below is the example of such implementation.