1

就我而言,我想用 ID 刷新组件baseTab。它本身包含在 formmain和 tabViewtabs中。对组件的绝对引用是main:tabs:baseTab。这就是我需要在更新属性中引用的内容:

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

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

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

  • :baseTab
  • 基本表
  • 主要:baseTab
  • :tabs:baseTab

而且这些都不起作用,每个都导致页面错误,即此类组件不存在....

4

2 回答 2

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}"/>

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

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

于 2013-01-09T15:38:42.960 回答
0

除非您的组件在同一个父级中,否则不要认为这是可能的。

于 2013-01-09T14:28:13.577 回答