我一直注意到页面中使用的所有bean都在更新页面的任何一小部分时被不必要地实例化.好的,它们是请求作用域,因此将在每个请求上实例化,但只有当正在更新的页面部分需要那些bean时才应该这样做.不是吗?
为什么JSF中这个糟糕的设计?
我找到了造成这种行为的真正罪魁祸首,我f:event type="preRenderView"在网页的某些地方.这实际上导致重新实例化这些bean以调用监听器.修复是用来f:event type="preRenderComponent"代替.这减少了每个请求中大多数不必要的bean实例化,但我仍然看到一些不必要的bean实例化.
在这种情况下,只有当 bean 参与构建视图时才会被构建(阅读:它的属性之一在标记处理程序的任何属性或UI 组件的id或属性中被引用)。binding否则不会建造。至少,当我“以通常的方式”设计 JSF 视图时,我无法在 Mojarra 2.1.11 中重现您的问题(也不能在 2.0.0 中重现)。
视图无法部分构建,但可以部分保存和恢复其状态,并且可以部分渲染 UI 组件树。
您的“JSF 设计不佳”的抱怨没有任何争议。
| 归档时间: |
|
| 查看次数: |
648 次 |
| 最近记录: |