0

parent-parent-naming コンテナの子であるコンポーネントを識別する ID を参照することは可能ですか?

例えば:

<div class="browserDiv"
            id="browserObjects">
            <p:selectOneRadio id ="selectedFolder" value="${cc.attrs.value.selectedObjectPath}" layout="custom">
                <f:selectItems value="${cc.attrs.value.objectList}"
                                var="object" itmeValue="${object.path}" itemLabel=""/>
            </p:selectOneRadio>

            <table>
                <ui:repeat var="object" value="${cc.attrs.value.objectList}" id ="repeat" varStatus="status" >
                        <tr>
                            <td class="checkBoxCell">
                                <p:radioButton id="radioButton_${object.path}" for="selectedFolder" itemIndex="#{status.index}"/>
                            </td>
                        </tr>
                </ui:repeat>
            </table>

        </div>

selectedFolderの for-attribute からid を参照したい<p:radioButton>。しかし、<ui:repeat>は であるためNamingContainerselectedFolderは別のものにあり、NamingContainerこれをどのように参照できるかわかりません。のようなものを書くことは可能for="../selectedFolder"ですか?

これは複合コンポーネントの一部であるため、絶対 ID 参照は使用できません。prependId="false"inも使用してみまし<ui:repeat>たが、うまくいきませんでした。

4

1 に答える 1

0

相対クライアント ID の代わりに絶対クライアント ID を使用します。

あなたが持っていると仮定すると

<h:form id="form">
    <p:selectOneRadio id="radio" ...>
        ...
    </p:selectOneRadio>
</h:form>

その絶対クライアント ID は になりますform:radio。これは、生成された HTML ソースに表示される値とまったく同じです。別のネーミング コンテナー内から参照するには、(既定の) ネーミング コンテナー セパレーターを前に付けて、:になるようにする必要があります:form:radio。したがって、これは次のようにする必要があります。

<p:radioButton for=":form:radio" ... />

具体的な問題とは関係なく、ほとんどどこでも${}代わりに使用しています。#{}表示のみの値では問題なく機能する${}可能性がありますが、フォームを送信するたびにまったく機能しません。#{}代わりに本当に必要です。するだけでなくget、するだけでなくset、する${}だけですget#{}すべての JSF ページ全体に固執してください。

以下も参照してください。


コメントに従って更新します。名前付けコンテナーがすべてコンポジット内のどこに配置されているかは不明ですが、必要に応じて、コンポジットの絶対クライアント ID を次のように動的に解決できます。

<p:radioButton for=":#{cc.clientId}:radio" ... />
于 2012-01-16T15:08:58.553 に答える