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

问题描述 投票:0回答:5

我有一个 JSF 应用程序,我正在将其转换为使用 Web 服务而不是直接的数据库查询。有一些非常长的列表,可以通过简单的 SQL 查询轻松返回 before。我想弄清楚如何使用 JSF/Web 服务实现分页。有没有好的设计模式来进行分页 Web 服务?

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

java web-services jsf pagination
5个回答
3
投票

这取决于你想要进行客户端分页还是服务器端分页。如果是服务器端,您的 Web 服务必须包含几个附加参数(例如“startFrom”和“pageSize”),以便您指定要检索数据的哪个“页面”。您的服务可能还需要返回总结果大小,以便您可以生成分页控件。

如果您认为这太费力,您可以在支持 bean 中进行客户端分页(或获取一个组件来为您完成此操作),但是如果您正在谈论数千个对象,则不建议这样做!


2
投票

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

它们基本上抽象了 JSF 可以轻松使用的 Seam 组件中的所有 SQL/JPA。

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


2
投票

Trinidad 有一个支持分页的表格组件,这可能会有所帮助。它并不理想,但与 Seam 配合得很好,如 Pete Muir 的 Backing Trinidad's dataTable with Seam 博客文章中所述。

如果找不到您喜欢的 JSF 组件,您需要编写自己的逻辑来设置 EJB-QL (JPA) 查询中的 limitoffset 参数。


2
投票

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

这非常简单,如果您还没有使用 RichFaces,那么与 MyFaces 集成真的很容易。


1
投票

如果您要立即从 Web 服务返回所有结果,并且无法将分页包含到实际的 Web 服务调用中,则可以尝试将项目列表设置为托管 Bean 上的属性。然后您可以将其连接到 Tomahawk 数据表上的“value”属性:

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

然后您可以使用 Tomahawk dataScroller 对存储在该属性中的项目列表进行分页。这是该组件的参考,它与 dataTable 组件配合得很好:

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

您可以将其包含在数据表的页眉/页脚方面或作为单独的组件(您需要在 dataScroller 的“for”属性中指定数据表的 id。

您还可以使用数据表执行其他一些巧妙的操作,例如排序和切换每行的详细信息,但是一旦您完成基本的分页工作,就可以实现这些操作。

希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.