为什么JSF,根据请求更新视图的一部分实例化页面上的所有bean而不是页面的那一部分使用的bean?

Raj*_*pta 5 java jsf jsf-2

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

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

更新:

我找到了造成这种行为的真正罪魁祸首,我f:event type="preRenderView"在网页的某些地方.这实际上导致重新实例化这些bean以调用监听器.修复是用来f:event type="preRenderComponent"代替.这减少了每个请求中大多数不必要的bean实例化,但我仍然看到一些不必要的bean实例化.

Bal*_*usC 4

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

视图无法部分构建,但可以部分保存和恢复其状态,并且可以部分渲染 UI 组件树。

您的“JSF 设计不佳”的抱怨没有任何争议。

也可以看看: