代码之家  ›  专栏  ›  技术社区  ›  Markos Fragkakis

请求作用域bean和数据模型初始化?

  •  3
  • Markos Fragkakis  · 技术社区  · 16 年前

    好的,我设法缩小了范围。

    我和 请求范围 豆。唯一的会话范围bean包含我的接口的排序和过滤。

    排序需要来自我的部分的一些逻辑,所以我调用某个方法来为会话bean设置正确的值。这是在调用应用程序阶段执行的。

    因此,任何更改都是在页面实际呈现的呈现响应阶段进行的。

    问题是我页面中的JSF datatable和datascroller调用 backingBean.getDataModel() 从数据库和 dataModel.getRowCount() (我已经实现了调用一个运行单独查询的方法) 应用请求值 阶段。这两个查询也发生在渲染响应阶段,这是唯一一个更改都到位的阶段,查询将正常运行。

    我只想执行排序和筛选,只执行所需的查询,而不是更多。

    有什么建议吗?

    1 回复  |  直到 16 年前
        1
  •  1
  •   BalusC    16 年前

    但是,如果您没有任何要验证/检查值更改的输入字段,也没有任何行中的按钮/链接,那么我可以想象,在应用请求值阶段的查询在您眼中是完全多余的。

    现在,战斧是第一个有一个很好的解决办法,这在味道的 preserveDataModel <t:dataTable> ,这基本上将数据模型放在特定于请求的组件树中(该组件树已存储在会话范围或客户端的隐藏输入字段中,具体取决于您在faces config中配置视图状态的存储位置的方式)。RichFaces没有这样的直接解决方案,但是 <a4j:keepAlive> 基本上是一样的。它只会影响“整个”bean,因此,如果您的数据bean包含的不仅仅是数据模型,那么您可以考虑重构它。您应该记住,将bean设计为会话范围的bean。

    可视 整个的 数据模型,包括所有其他页面)。查看它是否超过了在单个HTTP请求期间触发双SQL查询的成本。

    希望这有帮助。