1

私の場合、コンポーネントを ID で更新したいと思いますbaseTabmainformと tabView の場合、それ自体が含まれtabsます。コンポーネントへの絶対参照はmain:tabs:baseTab. これは、たとえば update 属性で参照する必要があるものです。

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

このような完全な ID の問題は、それが長く、コンポーネント階層で何かを変更すると簡単に変更できることです。ID baseTab はそれ自体が一意であるため、少なくとも理論的には、このコンポーネントを直接参照できるはずです。しかし、どうすればそれができますか?

一意の ID を介してコンポーネントを参照する構文は何ですか? 私は次のことを試しました:

  • :ベースタブ
  • ベースタブ
  • メイン:baseTab
  • :tabs:baseTab

そして、どれも機能していませんでした.それぞれがそのようなコンポーネントが存在しないというページエラーを引き起こしていました....

4

2 に答える 2

2

この参照を作成しないことの価値は、コンポーネント ツリー構造に依存することがわかります。

ValueExpressionを取ることができるため、これにはコンポーネントバインディングを活用できるはずです。update

(たとえば) 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 に答える