gpt4 book ai didi

java - 为什么 JSF 在请求更新 View 的一部分时会实例化页面上的所有 bean,而不是在页面的该部分中使用的 bean?

转载 作者:搜寻专家 更新时间:2023-10-31 19:57:04 25 4
gpt4 key购买 nike

我注意到我在页面中使用的所有 bean 在更新页面的任何一小部分时都被不必要地实例化了。好的,它们是请求范围的,因此将在每个请求上实例化,但只有当正在更新的页面的那部分需要这些 bean 时才应该这样做。不是吗?

为什么 JSF 中的这种糟糕设计?

更新:

我找到了导致这种行为的真正罪魁祸首,我在网页的某些地方有 f:event type="preRenderView"。这实际上导致重新实例化这些 bean 以调用监听器。解决方法是改用 f:event type="preRenderComponent"。这减少了每次请求时大部分不必要的 bean 实例化,但我仍然看到一些不必要的 bean 实例化。

最佳答案

在这种情况下,bean 只会在它参与构建 View 时被构建(阅读:它的一个属性在标签处理程序或 id 的任何属性中被引用UI 组件的 binding 属性)。否则不会 build 。至少,在“通常的方式”设计 JSF View 时,我无法在 Mojarra 2.1.11(也不能在 2.0.0)中重现您的问题。

View 不能部分构建,但它的状态可以部分保存和恢复,UI 组件树可以部分渲染。

您对“JSF 中糟糕的设计”的提示没有理由。

另见:

关于java - 为什么 JSF 在请求更新 View 的一部分时会实例化页面上的所有 bean,而不是在页面的该部分中使用的 bean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11589731/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com