我binding
在以下问题中阅读了有关与属性的组件绑定的信息:
我知道它将视图中 JSF 标记后面的 UI 组件绑定到UIComponent
支持 bean 中的属性。但是,我很困惑组件绑定的用途是什么以及何时应该使用它。有人可以用更简单的方式解释它并给出一些实际的例子吗?
我binding
在以下问题中阅读了有关与属性的组件绑定的信息:
我知道它将视图中 JSF 标记后面的 UI 组件绑定到UIComponent
支持 bean 中的属性。但是,我很困惑组件绑定的用途是什么以及何时应该使用它。有人可以用更简单的方式解释它并给出一些实际的例子吗?
如果你想访问整个 UIComponent
而不是仅仅访问它的值,你应该使用它。例如,访问一些无法在视图中调用/绑定的方法。这在您发现的第一个问题中得到了回答:JSF 组件绑定 - 一些混乱
您发现的第二个问题,组件绑定与 findComponent() - 何时使用哪个?,只是回答“binding
对findComponent()
”,它根本不像你想的那样回答“binding
对value
” 。请不要对此感到困惑。value
显然会赢得胜利binding
。
在现实世界的代码中,组件绑定到支持 bean 通常仅在开发人员需要通过例如component.getChildren().add(...)
. 但是,该 bean 应该是请求范围的。更广泛的范围可能会导致不一致,因为组件实例基本上是在每个请求的基础上创建的,不应该在多个请求之间共享。视图范围也可以,但是这样内存效率非常低,并且在 2.1.18 之前的 Mojarra 版本上,还必须关闭部分状态保存,否则binding
将在每个请求上隐式地重新创建所引用的视图范围 bean 实例。另请参阅JSF2 Facelets 中的 JSTL... 有意义吗?以获得相关答案。
也可以将组件绑定到“视图”。例如
<h:someComponent binding="#{some}">
这指的UIComponent
是 Facelet 范围(“页面范围”)中的一个实例。例如#{some.clientId}
,这使您可以#{some.value}
在同一页面的其他地方使用。请注意,此处不涉及支持 bean。另请参见没有 bean 属性的 JSF 组件绑定。
以下是一些现实世界使用的binding
属性设备:
阅读这个答案:
但是,社区中很多人不建议绑定。例如看这篇文章:
http://drewdev.blogspot.com/2009/01/jsf-component-binding-stinks.html