It's a lot easier/faster/cheaper to simply employ one of the
JSF extension tagsets that provide table pagination. You don't have to spend a lot of time designing and debugging what has been done many times before.
However, basically, the dataTable's backing Model object (DataModel) is the reference for the data that gets displayed. By making this model be a subset window onto the larger data set that you want to page through, you can display as many or as few lines in the table as you like. When the user clicks a table nagivation button, just update the wrapped data collection for the datamodel to reference the rows that the updates View should show.
The secret of how to be miserable is to constantly expect things are going to happen the way that they are "supposed" to happen.
You can have faith, which carries the understanding that you may be disappointed. Then there's being a willfully-blind idiot, which virtually guarantees it.