如何使用唯一ID定位特定的JSF组件?

时间:2013-01-09 13:57:06

标签: jsf jsf-2 primefaces

在我的情况下,我想刷新标识为baseTab的组件。如果表单main和tabView tabs,它本身就包含在内。对组件的绝对引用是main:tabs:baseTab。这就是我需要在更新属性中引用的内容:

 <p:commandButton update="main:tabs:baseTab"/>

这种完整ID的问题在于它很长并且当我在组件层次结构中更改某些内容时可以轻松更改。 ID baseTab本身是唯一的,所以至少在理论上我应该能够直接引用这个组件。但我怎么能这样做?

通过唯一ID引用组件的语法是什么?我尝试了以下内容:

  • :baseTab
  • baseTab
  • 主:baseTab
  • :标签:baseTab

并且没有一个工作,每个都导致页面错误,这个组件不存在....

2 个答案:

答案 0 :(得分:2)

我可以看到不进行此引用的值取决于组件树结构。

可以利用组件绑定,因为update可以使用ValueExpression

使用(例如)faces-config.xml:

在请求范围中定义映射
<managed-bean>
  <managed-bean-name>bind</managed-bean-name>
  <managed-bean-class>java.util.HashMap</managed-bean-class>
  <managed-bean-scope>request</managed-bean-scope>
</managed-bean>

将目标绑定到地图:

<h:foo binding="#{bind.someIdForBinding}" />

在按钮中引用此控件的客户端标识符:

<p:commandButton update=":#{bind.someIdForBinding.clientId}"/>

创建/恢复树时,目标组件将被放入绑定映射中。

请注意,此代码未经测试。

答案 1 :(得分:0)

除非你的组件在同一个父母身上,否则不要认为是可能的。