【问题标题】:JBoss Seam - Dealing with large data returned from SQLJBoss Seam - 处理从 SQL 返回的大数据
【发布时间】:2011-09-29 09:22:25
【问题描述】:

我正在寻找技术/最佳实践来处理我们基于 Web 的应用程序的工作方式。

目前,当用户搜索一个字段时,它可以一次返回超过 10000 条记录,这对我来说是对带宽和内存的浪费。

有没有办法根据选择显示的行数来限制返回的行数。即如果在网页上用户选择每页 100 行然后只返回 100 行而不是一次加载所有 10000 行,那么当单击下一页时,将加载接下来的 100 行,依此类推。

UPDATE :当前实现获取所有数据,将其绑定到t:datatablet:dataScroller 以在页面之间导航。

根据我在 JFS 1.1 中的阅读,没有提供服务器端分页(如果我错了,请纠正我),为了提供这种机制,我需要编写自定义代码,例如 http://wiki.apache.org/myfaces/WorkingWithLargeTables

有人可以确认这是一个好的解决方案吗?使用 RichFaces 不是一种选择。

谢谢

【问题讨论】:

    标签: sql jboss seam


    【解决方案1】:

    您应该使用 jsf 组件进行服务器端分页,例如 Richfaces:

    http://katzmaier.blogspot.com/2010/03/richfaces-server-side-pagination.html

    【讨论】:

    • 感谢您的回复。当前系统使用JSF标签<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%> <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>t:dataTable,那么使用EntityManager不是更好吗?但是阅读了几篇关于如何使用 EntityManager 对结果列表进行分页的文章,似乎需要从 BackBean 类到 jsp 再到 Navigation 规则进行很多更改。是否有一本书涵盖了 JBoss Seam 的这一方面(分页,处理大型 reuslt 集..)。我觉得我知道的不够多,无法开始做出改变。
    • 这里没有导航规则。您只需要一个支持外部数据源的 JSF 组件(就像 rich:dataTable 一样)。不幸的是,MyFaces 似乎不支持它。顺便说一句,Richfaces 是 Seam 最受支持的 JSF 库之一。
    【解决方案2】:

    能否使用 Paginator 组件来控制相关记录数的显示?

    如果您需要限制返回的行数,可以将其指定为查询语法的一部分。

    【讨论】:

    • 感谢您的回复,一般情况下是这样吗?例如,在需要显示大量数据的情况下,通过返回前 100 个来限制行。信不信由你,在我们的系统中,它的实现方式是,如果给定的搜索条件返回 100000 行,那么它将返回整个负载,这会导致我们的 tomcat 出现各种内存问题。
    • 我会限制您的查询,例如 200 行,然后在 Paginator 组件(例如 Richfaces 组件)中显示这些行。然后,随着用户在结果集中向前移动,您可以根据需要从 d/b 中召唤更多行。
    【解决方案3】:

    看一下 entityquery 类。这个已经支持服务器端的分页和排序。它适用于简单或丰富的数据表。如果您需要一些轻量级的东西,即使是在普通 jsf 之上的 jquery 数据表也是可能的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-12
      • 1970-01-01
      • 2010-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多