什么是JSF中的组件绑定? 什么时候最好使用?

我已经阅读了有关binding属性的组件绑定在以下问题:

  • JSF组件绑定 – 有些混乱
  • 组件绑定vs findComponent() – 何时使用哪个?

我知道它将视图中JSF标记后面的UI组件绑定到了backing bean中的UIComponent属性。 然而,我很困惑什么是组件绑定的使用,什么时候使用它。 有人可以用更简单的方式解释它,并给出一些实际的例子吗?

如果你想访问整个 UIComponent而不仅仅是它的值,你应该使用它。 例如,访问某些在视图中无法调用/绑定的方法。 这在第一个问题中find了答案: JSF组件绑定 – 有些混乱

你发现的第二个问题, 组件绑定vs findComponent() – 何时使用哪个? ,只是回答bindingfindComponent() ,它不会回答bindingvalue ,因为你似乎认为。 请不要被这个困惑。 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