私はテンプレートを持っており、その定義ではいくつかのフォームとボタンを使用しています。レンダリング/更新属性のテンプレートの親命名コンテナのIDを取得する
問題は、定義(定義)xhtmlファイルはコンポーネント階層を知らないということです。
たとえば、同じ定義ファイル内の別のフォームで要素 "table2"を更新したいとします。
テンプレートインサート:
<p:tabView id="nav"> <!-- nav -->
<ui:insert name="content_nav">content navigation</ui:insert>
</p:tabView>
が私の階層の最初のレベルを定義し、 "NAV"
テンプレートを定義します。私の "私は知られたくない部分を定義するには
<ui:define name="content_nav">
<h:form id="form1"> <!-- nav:form1 -->
<h:dataTable id="table1"/> <!-- nav:form1:table1 -->
<p:inputText value="#{bean.value}"/>
<p:commandButton action="..." update="nav:form2:table2"/>
</h:form>
<h:form id="form2">
<h:dataTable id="table2"/> <!-- nav:form2:table2 -->
<!-- other elements -->
</h:form>
</ui:define>
をナビ "!
どうすればいいですか?または1つの命名コンポーネントを上位に移動するにはどうすればよいですか?
時々私のようなものを見た:
update=":table2"
をしかし、私はこれについての情報を見つけることができませんでした?、JavaEEの6ドキュメントはちょうど@キーワードに言及しています。
あなたの答えをありがとう。 #{component.namingContainer.parent.namingContainer.clientId}は正常に動作します。しかし、私はより洗練されたソリューション(構文砂糖)を期待していました。 folderstructuresの場合は "../"と同様です。なぜあなたはまだプレフィックスとしてコロンを書いたのですか?私はjsfに新しいので、私は尋ねる。私はそのテンプレートを複数回使用することができたので、不明な命名コンテナclientIdを直接使用することは、より醜いので、それは醜いとは思わない。私は兄弟ネーミングコンテナのclientIdを取得するEL関数を自分自身で定義すると思います。 – djmj
コロンは、デフォルトの 'NamingContainer'セパレータ文字です(ただし、コンテキストパラメータでオーバーライドできます)。プレフィックスとして使用する場合、クライアントIDは "絶対的な"クライアントIDとして解釈されます。つまり、現在のNamingContainer(コンポジット、データテーブル、フォームなど)の代わりにUIViewRootを基準に解決されています。より良い解決策としては、代わりに 'p:component()'関数を使用してください(または自作してください)。 – BalusC
p:コンポーネントが私のために機能しません。私はこのJSFの動作には本当に悲しいです。何も動作しません。 – MaikoID