前面一篇直接使用了Myfaces中的两个Component完成了一个简单的分页,这里将会介绍一种On-demand loading的方法来进行分页,仅仅在需要数据的时候加载。
先来说一些题外话,为了实现这种方式的分页,公司里大约5-6个人做了半个多月的工作,扩展了dataTable,修改了dataScrollor,以及各种其他的方法,但是都不是很优雅。在上个月底的时候,在Myfaces的Mail List中也针对这个问题展开了一系列的讨论,最后有人总结了讨论中提出的比较好的方法,提出了以下的分页方法,也是目前实现的最为优雅的方法,也就是不对dataTable和dataScrollor做任何修改,仅仅通过扩展DataModel来实现分页。
DataModel 是一个抽象类,用于封装各种类型的数据源和数据对象的访问,JSF中dataTable中绑定的数据实际上被包装成了一个DataModel,以消除各种不同数据源和数据类型的复杂性,在前面一篇中我们访问数据库并拿到了一个List,交给dataTable,这时候,JSF会将这个List包装成 ListDataModel ,dataTable访问数据都是通过这个DataModel进行的,而不是直接使用List。
接下来我们要将需要的页的数据封装到一个DataPage中去,这个类表示了我们需要的一页的数据,里面包含有三个元素:datasetSize,startRow,和一个用于表示具体数据的List。datasetSize表示了这个记录集的总条数,查询数据的时候,使用同样的条件取count即可,startRow表示该页的起始行在数据库中所有记录集中的位置。
![ExpandedBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
![ContractedBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![ExpandedBlockEnd.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![None.gif](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![ExpandedBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
![ContractedBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif)
![dot.gif](http://www.blogjava.net/Images/dot.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockEnd.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](http://www.blogjava.net/Images/dot.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockEnd.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockEnd.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](http://www.blogjava.net/Images/dot.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockEnd.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockEnd.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](http://www.blogjava.net/Images/dot.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockEnd.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockEnd.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](http://www.blogjava.net/Images/dot.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockEnd.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![ExpandedBlockEnd.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
接下来,我们要对DataModel进行封装,达到我们分页的要求。该DataModel仅仅持有了一页的数据DataPage,并在适当的时候加载数据,读取我们需要页的数据。
![ExpandedBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
![ContractedBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
* Any time a managed bean wants to avoid holding an entire dataset, the managed
* bean should declare an inner class which extends this class and implements
* the fetchData method. This method is called as needed when the table requires
* data that isn't available in the current data page held by this object.
*
* This does require the managed bean (and in general the business method that
* the managed bean uses) to provide the data wrapped in a DataPage object that
* provides info on the full size of the dataset.
![None.gif](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![ExpandedBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
![ContractedBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif)
![dot.gif](http://www.blogjava.net/Images/dot.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockEnd.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](http://www.blogjava.net/Images/dot.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockEnd.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockEnd.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](http://www.blogjava.net/Images/dot.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](http://www.blogjava.net/Images/dot.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockEnd.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](http://www.blogjava.net/Images/dot.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockEnd.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![ExpandedSubBlockEnd.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](http://www.blogjava.net/Images/dot.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockEnd.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockEnd.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](http://www.blogjava.net/Images/dot.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockEnd.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockEnd.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](http://www.blogjava.net/Images/dot.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockEnd.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockEnd.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](http://www.blogjava.net/Images/dot.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](http://www.blogjava.net/Images/dot.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockEnd.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](http://www.blogjava.net/Images/dot.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockEnd.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockEnd.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8485249/viewspace-429910/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/8485249/viewspace-429910/