如何在JavaServer Faces中执行分页列表?

问题描述:

我有一个JSF应用程序,我将其转换为使用webservices而不是直接查询数据库。有一些极长的列表之前可以通过简单的SQL查询轻松返回。我想知道如何使用JSF/Web服务实现分页。有没有一个很好的设计模式来做页面Web服务?如何在JavaServer Faces中执行分页列表?

如果很重要,我目前使用带有Tomahawk扩展(由MyFaces开发团队在捐赠给Apache之前创建的一组JSF组件)的JSF的参考实现Apache MyFaces

我喜欢Seam的查询对象:http://docs.jboss.com/seam/2.1.0.BETA1/reference/en-US/html_single/#d0e7527

他们基本上是抽象在JSF可以轻松地使用Seam组件的所有SQL/JPA。

如果你不想使用Seam和/或JPA,你可以实现类似的模式。

Trinidad有一个支持分页的表格组件,这可能有所帮助。这并不理想,但对于Seam来说,它的运行效果已经足够好了,正如Pete Muir的Backing Trinidad's dataTable with Seam博客文章中所述。

如果你没有找到你喜欢的JSF组件,你需要编写自己的逻辑来设置参数限制抵消你的EJB-QL(JPA)查询

这取决于您是要执行客户端还是服务器端分页。如果是服务器端,您的Web服务将不得不包含一些额外的参数(例如“startFrom”和“pageSize”),这些参数可让您指定要检索的数据的哪个“页面”。您的服务可能还需要返回总体结果大小,以便生成分页控件。

如果您决定付出太多的努力,您可以在支持bean中进行客户端分页(或者为您完成一个组件),但是如果您正在谈论数千个对象,则不推荐使用它!

我们使用RichFaces的库数据表:http://livedemo.exadel.com/richfaces-demo/richfaces/dataTable.jsf?tab=usage

这是很简单的,如果你不使用RichFaces的已经,这是真的容易与MyFaces的整合。

如果您一次从web服务返回所有结果,并且无法将分页包含到实际的Web服务调用中,则可以尝试将项目列表设置为托管bean上的属性。然后,你可以连接多达上的战斧DataTable中的“值”属性:

http://myfaces.apache.org/tomahawk-project/tomahawk/tagdoc/t_dataTable.html

,然后你可以用一个战斧dataScroller进行分页了存储在该属性物品的清单。下面是该组件的参考,它与dataTable组件效果很好:

http://myfaces.apache.org/tomahawk-project/tomahawk/tagdoc/t_dataScroller.html

您可以包含此DataTable的或作为一个单独的成分,它的页眉/页脚面内(您将需要指定dataScroller'for'属性中dataTable的id。

你可以用dataTable做其他整洁的事情,比如排序和切换每行的细节,但是一旦你获得了基本的分页工作,就可以实现它。

希望有帮助!