複合コンポーネントを作成しました。その中には<f:ajax>タグがあり、その「render」属性はccのパラメーターです。
このようなもの:
...
<cc:attribute name="additionalAjaxRenderIds" type="java.lang.String"></cc:attribute>
...
<h:commandLink value="test" action="#{myBean.someAction}" id="testLink" >
<f:ajax execute="@this" render="#{cc.attrs.additionalAjaxRenderIds} "/>
</h:commandLink>
...
私はこのccをフォーム内で使用します。これは、すでに外部の名前付けコンテナーにあります。
<h:form id="myForm">
...
<mycomp:myComponent id="myCC" additionalAjaxRenderIds=":#{component.namingContainer.parent.clientId}:myPanel" />
<h:panelGroup id="myPanel">
...
</h:panelGroup>
...
</h:form>
問題は、私が書く場合
additionalAjaxRenderIds=":#{component.namingContainer.clientId}:myPanel"
このエラーが発生します:
<f:ajax> contains an unknown id ':j_idt44:myForm:myCC:myPanel' - cannot locate it in the context of the component testLink
一方、これを使用する場合(+ .parent):
additionalAjaxRenderIds=":#{component.namingContainer.parent.clientId}:myPanel"
エラーは次のとおりです。
<f:ajax> contains an unknown id ':j_idt44:myPanel' - cannot locate it in the context of the component testLink
期待されるIDの代わりに:
':j_idt44:myForm:myPanel'
ですから、私のccのネーミングコンテナの親はフォームではなく、外部のネーミングコンテナのようです。
次の方法はありますか:1、正しい親(フォーム)を取得する2、パラメーターとして渡す前にELを評価する(したがって、EL式の代わりに計算されたclientIdをccに渡すことができるため、コンポーネントは参照しませんcommandLinkタグに、しかし私がccを入れたh:formに)
私は私が使うことができることを知っています
additionalAjaxRenderIds=":#{component.namingContainer.parent.clientId}:myForm:myPanel"
しかし、私はその解決策が好きではありません
また、フォームのprependId属性をfalseに設定すると、コンポーネントのルックアップ全体が壊れます(結果としてajaxタグも壊れます)