什么是JSF中的组件绑定? 什么时候最好使用?
我已经阅读了有关binding
属性的组件绑定在以下问题:
- JSF组件绑定 – 有些混乱
- 组件绑定vs findComponent() – 何时使用哪个?
我知道它将视图中JSF标记后面的UI组件绑定到了backing bean中的UIComponent
属性。 然而,我很困惑什么是组件绑定的使用,什么时候使用它。 有人可以用更简单的方式解释它,并给出一些实际的例子吗?
如果你想访问整个 UIComponent
而不仅仅是它的值,你应该使用它。 例如,访问某些在视图中无法调用/绑定的方法。 这在第一个问题中find了答案: JSF组件绑定 – 有些混乱
你发现的第二个问题, 组件绑定vs findComponent() – 何时使用哪个? ,只是回答“ binding
与findComponent()
” ,它不会回答“ binding
与value
” ,因为你似乎认为。 请不要被这个困惑。 value
显然会胜过binding
。
在现实世界的代码中,只要开发者需要通过component.getChildren().add(...)
以编程方式操作其子代,通常只使用绑定到后台bean的component.getChildren().add(...)
。 该bean应该是请求作用域。 由于组件实例基本上是基于每个请求创build的,因此更广泛的范围可能导致无法实现,因此不应在多个请求之间共享。 视图范围也可以,但是这是非常低效的内存,在2.1.18之前的Mojarra版本中,也必须closures部分状态保存,否则在每个请求中隐式地重新创build通过binding
引用的视图范围的bean实例。 另请参阅JSF2 Facelets中的JSTL …有意义吗? 为相关的答案。
也可以将组件绑定到“视图”。 例如
<h:someComponent binding="#{some}">
这指的是Facelet作用域中的UIComponent
实例(“page作用域”)。 这使您可以在同一页面的其他地方使用例如#{some.clientId}
, #{some.value}
。 请注意,这里没有涉及任何一个支持bean。 另请参见无Bean属性的JSF组件绑定 。
以下是一些binding
属性的真实世界使用装置:
- 在通过第一文本字段的Ajax进行数据validation之后禁用第二文本字段
- 检查哪个表单有错误
- 根据下拉列表selectinput文本validation
- 如何让validation取决于按下的button?
- 如何在h:dataTable中实现行编号
- 将两个h:inputText字段分割为小时和分钟,并使用f:convertDateTime分割java.util.Date
阅读这个答案:
在JSF中使用绑定属性的优点是什么?
不过,社会上很多人不推荐具有约束力。 例如看这篇文章:
http://drewdev.blogspot.com/2009/01/jsf-component-binding-stinks.html