请求范围的 bean 和数据模型初始化?

2024-03-24

更新二:好的,我设法缩小了范围。

我有一个带有数据表的页面,具有排序和过滤功能,两者都发生在数据库中。换句话说,我不使用我使用的 rich:datatable 的嵌入式功能,而是让 DB 来完成工作。

我与请求范围豆子。唯一的会话范围 bean 包含我的界面的排序和过滤。

对每列的过滤都绑定到特定的会话 bean 字段。因此,它实际上是在更新模型值阶段更新的。

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

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

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

这意味着要在执行过滤或排序后显示页面,会发生双倍的查询。

我只想执行排序和过滤,仅执行所需的查询,仅此而已。

有什么建议么?


应用请求值阶段期间的 getter 调用是强制性的,因为 JSF 需要知道最初显示了哪些输入值,以便最终可以在下一阶段(如果适用)进行任何验证和/或调用任何 valuechangelistener。还必须找出在任何行中按下/单击了哪个按钮/链接,以便它知道在调用操作阶段要调用哪个 bean 操作。

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

不幸的是,您无法完全禁用它。从技术上讲,唯一的方法是将数据 bean 放入会话范围中,并仅在 bean 的构造函数和 bean 操作方法中执行昂贵的 SQL 查询(以及数据模型的刷新),以便仅在 bean 运行期间调用它。构造(对于第一个视图)和 bean 的操作方法期间(在新的排序/过滤器/任何请求期间)。然而,缺点是数据模型中的任何更改都会反映在最终用户在同一会话中打开的所有窗口/选项卡中,这可能会导致“wtf?”最终用户的体验。

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

如果数据模型变大,那么我可以想象这会影响服务器内存,但如果您只存储viewable内存中数据模型的一部分(因此不是entire数据模型,包括所有其他页面)。看看它是否超过在单个 HTTP 请求期间触发两次 SQL 查询的成本。

希望这可以帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

请求范围的 bean 和数据模型初始化? 的相关文章

  • 使用选项卡式活动中的捆绑包将值从活动传递到片段

    我是一个java文盲 但仍在尝试开发一个供我个人使用的应用程序 我从 android studio 的 Tabbed Activity 开始 除了 MainActivity 中的一个片段和一个包之外 大部分没有改变 这是我的代码 主要活动
  • Android NumberPicker 带字符串

    I have customised the NumberPicker to show text The output is this 当我按 确定 时 我想将 e x 鼠标添加到我的列表 文章 中 我得到的是索引值 int 它由 array
  • 从 OMElement 对象获取 InputStream/io.Reader

    我有一个OMElement对象 从中我想得到一个InputStream或读者对象 我想要的是流式传输xml来自OMElement我有 没有加载到内存中 我只能得到XMLStreamReader对此表示反对 但我找不到办法得到InputStr
  • 在 Kotlin 中实现返回 Collection 的 Java 方法

    我将 Kotlin 与 Spring Security 结合使用 实现该方法时 public interface UserDetails extends Serializable Collection
  • V8 如何管理它的堆?

    我知道V8的垃圾收集在工作时 会从GC的root开始追踪 这样无法到达的对象就会被标记然后被清除 我的问题是GC是如何遍历那些对象的 必须有一个数据结构来存储所有可达或不可达的对象 位图 链接表 顺便说一句 JVM 也做同样的事情吗 艾伦秀
  • JPanel透明背景和显示元素[重复]

    这个问题在这里已经有答案了 我插入一个背景图e 变成 aJPanel但一些界面元素消失了 以下 Java Swing 元素不会出现 标签标题 标签 usuario 标签 密码 按钮加速器 你能否使图像透明或元素不透明 setOpaque f
  • Java Swing:清除JList而不触发监听器

    我的情况如下 我有一个 JList 只要在列表中进行选择 它就会触发搜索 使用 ListSelectionListener 我正在尝试使用以下命令重置列表上的选择list clearSelection 这样做的问题是使用clearSelec
  • Spring webflow 应用程序:HTTP 302 暂时移动

    我的 java 应用程序中的每个请求都会生成另外 2 个带有 HTTP 302 错误的请求 例如 如果请求查看名为板 html 这个请求是从首页 html 我收到按以下顺序生成的 3 个请求 POST home html 302 Moved
  • 使用多个构造函数创建不可变类

    我正在阅读这一页 https docs oracle com javase tutorial essential concurrency imstrat html关于在 Java 中创建不可变类 并决定根据页面上概述的规范修改我正在编写的类
  • JUnit Eclipse 显示 System.out.print() 的

    我正在使用 JUnit 3 和 Eclipse 3 4 当我运行 JUnit 测试用例时 一切正常并且测试完美完成 唯一的事情是我想查看我正在运行的类的输出 所有类都具有一些输出值的基本 System out print 因此 当我运行测试
  • 如何解决错误:java.lang.ClassNotFoundException:io.netty.util.concurrent.GenericFutureListener?

    昨天我第一次尝试用 Java 制作 Prometheus 客户端 从 Python 开始 最后是 GoLang 是否找到示例 import io prometheus client Counter import io prometheus
  • Maven 多模块项目结构问题

    自从过去几周构建我的 Maven 多模块项目以来 这是我的一次有趣的经历 当我决定使用 Maven 进行构建生命周期管理时 我有几个原因希望选择 Maven A 大多数开发团队都是分开的 这样每个团队都可以在项目中的单独模块上工作 例如团队
  • JSP 标签+ scriptlet。如何启用脚本?

    我有一个使用标签模板的页面 我的 web xml 非常基本 我只是想在页面中运行一些代码 不 我对标签或其他替代品不感兴趣 我想使用不好的做法 scriptlet 哈哈 到目前为止 我收到了 HTTP ERROR 500 错误 Script
  • 如何自定义JProgressBar?

    我正在制作一个启动器 我想要一个自定义的进度栏 我已经做了一些研究 并且可以使用 JavaFX 从未用它做过任何事情 并且可以通过替换 UI 来实现 我正在寻找一个具有圆形边缘和圆形填充的酒吧 像这样的事情 package gui impo
  • 如何使用 Java 原生接口从 Java 调用 Go 函数?

    可以通过以下方式调用 C 方法JNA https en wikipedia org wiki Java Native AccessJava 中的接口 如何使用 Go 实现相同的功能 package main import fmt impor
  • Java中的DRY原则[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我一直在读关于DRY https en wikipedia org wiki Don 27t repeat yourself原则 虽然看起来
  • 字节码和位码有什么区别[重复]

    这个问题在这里已经有答案了 可能的重复 LLVM 和 java 字节码有什么区别 https stackoverflow com questions 454720 what are the differences between llvm
  • 为什么在尝试使用 Java 连接到 RDS PostgreSQL 数据库时会收到 SocketTimeoutException?

    我有一个 Spring 应用程序 我试图在 AWS 上托管 几天来我一直在努力配置 我有一个 EC2 实例 并且能够通过 SSH 连接到它 我还在 AWS 中设置了 Postgres RDS 数据库 但我无法使用 IDE 中的代码连接到它
  • Java泛型类型

    当我有一个界面时 public interface Foo
  • Java 9 中紧凑字符串和压缩字符串的区别

    有什么优点紧凑的字符串 http openjdk java net jeps 254JDK9 中的压缩字符串 压缩字符串 Java 6 和紧凑字符串 Java 9 都有相同的动机 字符串通常实际上是 Latin 1 因此浪费了一半的空间 和

随机推荐

  • 在 Kindle Fire 上调试 Adob​​e AIR 应用程序

    可能的 我认为要做到这一点 我需要将 Fire 上的 AIR 运行时升级到 3 但应用商店中的版本无法安装 据我所知 我无法创建既是强制运行时又是调试的 AIR apk 因此应用程序的调试版本必须在安装的 AIR 运行时上运行 由于 Fir
  • 如何创建从 C++17 中的可变参数模板推导的类型向量元组?

    我已经实现了一个集合类 它将元组向量转换为向量元组 它本质上是 AOS 到 SOA 的转换 此代码适用于两个模板类的示例 我试图通过使用可变参数模板使其更加通用 为了做到这一点 我需要为成员变量创建类型m col 在 C 17 中 是否可以
  • Java - 重置输入流

    我正在处理一些Java代码 其中有一个我读取了一次的InputStream 然后我需要以相同的方法再次读取它 问题是我需要将其位置重置为开头才能读取两次 我找到了一个解决该问题的黑客式解决方案 is mark Integer MAX VAL
  • 是否应该在客户端 jar 中提供依赖库?

    我们正在为其他内部应用程序提供一个客户端 jar 以连接到我们应用程序的 REST API 我们的 API 依赖于一些标准 Jakarta 库 将这些 JAR 文件包含在我们的客户端 jar 文件中是否是最佳实践 或者您只是记录依赖关系 并
  • 如何管理应用程序中到 Firebase 数据的动态路径

    我的 Firebase 中有如下数据 这是一个基于 Javascript 的 Web 应用程序 bids 400 1 50 00 2 60 00 401 1 55 00 2 65 00 400和401指的是拍卖号码 1 和 2 指的是每次拍
  • 如何使用filesaver.js

    在最新的 filesaver 文档中 给出了如何将 filesaver js 与 blobbuilder js 结合使用的示例 var bb new BlobBuilder bb append Lorem ipsum var fileSav
  • UISearchControllerDelegate - 搜索栏在表标题中不可见

    My UITableViewController正在符合新的UISearchControllerDelegate并且UISearchResultsUpdating 这是我的搜索栏设置代码 override func viewDidLoad
  • 在 C# 中从两个整数创建百分比值的最佳方法是什么?

    我有两个整数 我想将它们相除以获得百分比 这就是我现在所拥有的 int mappedItems someList Count x gt x Value null int totalItems someList Count int doubl
  • 在 WooCommerce 收到订单页面上的文本中添加客户电子邮件

    在 WooCommerce 中 在感谢 已收到订单页面的顶部 我添加了自定义文本 其中包含以下代码 add action woocommerce thankyou my order received text 1 0 function my
  • 动态渲染 React 风格组件时消除警告

    我在浏览器控制台中收到以下警告 react devtools backend js 3973 The component styled div with the id of sc dmRaPn has been created dynami
  • 作为类属性的变体类型的 VBA 数组

    我有一个处理多个数值数组 双精度类型 的类 并且还需要处理一个描述符数组 其中包括字符串和整数的混合 需要相应地用作字符串和数字 所以我决定创建一个变体类型的数组属性 不是包含数组的变体 但这似乎不起作用 而双精度数组却可以 具体来说 这种
  • Emacs - 无法使缓冲区提供保存工作

    当缓冲区未与文件关联时 我想让 Emacs 询问我是否要保存修改后的缓冲区 要打开新缓冲区 不访问文件 我的 emacs 文件中有以下函数 Creates a new empty buffer defun new empty buffer
  • Visual Studio - 使用从现有源创建项目向导时使用新筛选器而不是新文件夹

    我使用了 Visual Studio 2008 的从现有代码创建项目向导 但显然以这种方式创建的项目不允许您创建虚拟解决方案文件夹 而只允许您创建实际的系统文件夹 我想要标头文件 资源文件和源文件的标准项目设置 但我似乎无法创建所需的虚拟文
  • 如何在 MATLAB 中找到数组中的最大值及其索引?

    假设我有一个数组 a 2 5 4 7 返回最大值及其索引的函数是什么 例如 在我的例子中 该函数应返回 7 作为最大值 4 作为索引 函数是max 要获得第一个最大值 您应该这样做 val idx max a val是最大值并且idx是它的
  • Laravel Eloquent,仅选择存在关系的行

    我正在尝试从表中进行选择 但我只想选择具有现有关系的内容 例如 如果我有用户和评论 并且用户有很多评论 我想做类似的事情 User hasComments gt paginate 20 因此 我只想选择至少有 1 条评论的用户 并对该查询的
  • 更新到依赖项 24.2.0 后,在两个布局之间使用 FloatingActionButton 的渲染问题停止工作

    正如我在问题中提到的 我的 FloatingActionButton 位于两个布局之间 请检查经典示例here https stackoverflow com questions 24459352 how can i add the new
  • 如何让 Pylint 识别 NumPy 成员?

    我正在 Python 项目上运行 Pylint Pylint 多次抱怨无法找到 NumPy 成员 如何避免这种情况 同时避免跳过会员资格检查 从代码来看 import numpy as np print np zeros 1 4 当运行时
  • 如果使用双斜杠设置 会发生什么?

    我喜欢了解如何使用对我的网络爬虫来说很有价值 所以我用主要浏览器测试了几种组合 最后发现了一些我不明白的带有双斜杠的东西 如果您不喜欢阅读所有内容 请跳至测试结果D and E 所有测试演示 http gutt it basehref ph
  • 在 SQL 中从数据库表中删除除前 n 之外的所有内容

    从 sql 中的表中删除所有行但保留顶部的 n 行的最佳方法是什么 DELETE FROM Table WHERE ID NOT IN SELECT TOP 10 ID FROM Table Edit Chris 带来了良好的性能提升 因为
  • 请求范围的 bean 和数据模型初始化?

    更新二 好的 我设法缩小了范围 我有一个带有数据表的页面 具有排序和过滤功能 两者都发生在数据库中 换句话说 我不使用我使用的 rich datatable 的嵌入式功能 而是让 DB 来完成工作 我与请求范围豆子 唯一的会话范围 bean